以下是从uint8转换为float32的三种预处理方法。建议在conv2d-> batch norm-> ReLU结构(例如鲁棒性和避免死去的ReLU问题)中使用哪一个?或有任何建议?
如cs231n中所述,使用在训练集上计算的均值和标准差进行零中心归一化和归一化图像。我认为这种方法在训练集很大时会花费很多。
类似于tensorflow models中的代码,
image /= 255
image -= 0.5
image *= 2.0
将图像简单地除以255
答案 0 :(得分:2)
预处理具有不同的风格,通常取决于您使用的框架。例如,Pytorch归一化为[0,1],Tensorflow归一化为[-1,1],Keras将范围保留为[0,255]。我从Keras preprocessing code引用了这一点。以我的经验,规范化对图像没有任何影响,因此请坚持使用框架中使用的图像。但是,如果您有其他数据(例如测量的时间序列等),则归一化可以使成功的训练有所不同。
减去平均值并除以std是相当普遍的,并且由于广播而不必在计算上昂贵。事实证明,这在准确性方面有所不同。但是,我通常只将它用于像ImageNet这样的大图像数据集。