据我所知,如果我想将数据从[0, 255]归一化到[0, 1),可以在prototxt文件的transform_param中传递一个scale参数:0.00390625。然而,如果我想在prototxt级别将数据归一化到[-0.5, 0.5](以获得0均值分布),该怎么做呢?
假设我的train_val.prototxt文件如下所示:
transform_param { mirror: true crop_size: 227 scale: 0.00390625 mean_file: "some_mean_file.binaryproto"
从数学角度来看,我认为它看起来像下面这样:
normalized value = (input pixel value / 255) - 0.5
但我不知道如何将其映射到transform_param的scale值,因为scale值没有负值(符号值)的概念。或许,Caffe有不同的机制来实现这一点(而不是通过scale操作)。
从我在Udacity的深度学习讲座中获得的理解,它提到始终将输入归一化以获得0均值是一种好的做法。我可以放宽这种指导吗?如果我忽略它,会有什么显著影响吗?
回答:
查看caffe.proto
中关于TransformationParameter
的注释
// 对于数据预处理,我们可以进行简单的缩放和减去数据均值,如果提供了的话。请注意,均值减法总是先于缩放进行。
均值减法是在缩放之前进行的,因此,在减去mean_file
之后,您的数据大约在[-128, 128]
范围内。将其缩放1/256,您就完成了,您的数据应该大致在[-0.5, 0.5]
范围内。