在将数据提供给TensorFlow模型之前,我遇到了两种标准化方法。第一种方法是使用tf.dataset.per_image_standardization()。此函数分别计算每个图像的均值和stddev。我在官方的TensorFlow resnet cifar10教程中找到了这种方法。https://github.com/tensorflow/models/tree/master/official/resnet在测试阶段,每个图像都是单独标准化的。
第二种方法是计算每个通道样式中整个数据集的平均值和stddev。我在下面的densenet实现中找到了这种方法。https://github.com/taki0112/Densenet-Tensorflow在测试阶段,测试数据集也是作为整个批次进行预处理的。
这两种标准化方法是不等价的。我的问题是:对于第二种标准化方法,如何对单个图像进行预处理以进行推理?我们应该使用什么均值和stddev?我们是否需要使用为训练数据集计算的平均值和stddev,就像在批量标准化中一样?
发布于 2019-03-08 19:32:41
是的,你应该使用训练阶段计算出的平均值和标准差。
一般而言,有两种方法可以进行标准化。假设我们有一个形状为[B, H, W, C]的输入X
[H, W, C] 方法分别对图像的每个通道进行归一化。这可以通过3种方式来完成:跨训练集的imagenet: 'mean': [0.485, 0.456, 0.406], 'std': [0.229, 0.224, 0.225])进行归一化
大多数模型使用“每个通道”的方法,但没有正确的答案。重要的是在训练和测试阶段保持一致。有关更多详细信息,请查看here。
编辑:为了迁移学习的目的,最好的选择是逐渐采用新的数据集统计数据。因此,初始化来自旧数据集的统计数据,并在整个微调过程中使用新数据集中的统计数据更新它们。在训练阶段结束时,均值和标准差必须已调整为新的数据集。
https://stackoverflow.com/questions/55055866
复制相似问题