在将数据输入TensorFlow模型之前,我已经遇到了两种标准化方法。 第一种方法是使用tf.dataset.per_image_standardization()。 此函数分别为每个图像计算均值和标准差。我在TensorFlow resnet cifar10官方教程中找到了这种方法。 https://github.com/tensorflow/models/tree/master/official/resnet 在测试阶段,每张图片都分别进行了标准化。
第二种方法是以每个通道样式计算整个数据集的均值和标准差。我在以下的密集网络实现中找到了这种方法。https://github.com/taki0112/Densenet-Tensorflow 在测试阶段,还将对测试数据集进行整体处理。
这两种标准化方法不等效。 我的问题是:对于第二种标准化方法,如何对单个图像进行预处理以进行推理?我们应该使用什么意思和stddev?我们是否需要像批量归一化那样使用为训练数据集计算的均值和标准差?
答案 0 :(得分:1)
是的,您应该使用从训练阶段计算出的均值和标准差。
通常,有两种标准化方法。假设我们有一个X
形状的输入[B, H, W, C]
[H, W, C]
的矩阵,以估计每个特征的均值和标准差。imagenet: 'mean': [0.485, 0.456, 0.406], 'std': [0.229, 0.224, 0.225]
)大多数模型使用“每个通道”方法,但是没有正确的答案。重要的是在培训和测试阶段之间保持一致。还要检查here以获得更多详细信息。
edit:出于转移学习的目的,最好的选择是逐渐采用新的数据集统计数据。因此,从旧数据集中初始化统计信息,并在整个过程中进行微调,以新数据集中的统计信息进行更新。在训练阶段结束时,均值和标准差必须已调整为新的数据集。