我很想知道分别标准化每个图像与标准化整个数据集之间的区别。
我使用的tensorflow/models/official/resnet是使用tf.estimator构建的。 tf估算器支持生成tf数据集的输入管道功能。数据集对象应用tf.image.per_image_standardization运算符,该运算符通过从每个像素中减去图像本身的平均值来进行标准化,并强制执行单位方差。
这与其他ML预处理不同,其他ML预处理基于整个数据集的均值对图像进行标准化,例如使用sklearn.preprocessing.StandardScaler。
对于从tf.estimator.Estimator导出的tf SavedModel中是否保留了此输入管道的任何方面,我感到困惑。
所以我想知道在通过tf.contrib.predictor或以任何其他dnn格式部署模型时,是否仍需要应用功能标准化。
即使我正在使用per_image_standardization,也应该在数据集中应用标准化吗?如果是这样,我是否应该以某种方式从整个图像集中导出平均值,以便在为模型提供服务时,服务器可以从整个数据集中获取平均值并以这种方式应用标准化?
答案 0 :(得分:1)
在StandardScaler中,我们进行基于功能的规范化。对于图像,我们可以考虑整个数据分布,以像素为单位进行归一化,但这无济于事,因为分布的可变性。因此,最好使用 per_image_standardization ,它会将整个图像标准化为零和std1。这也使学习变得更快。
进一步this-link可能会有所帮助。有another-link,作者通过举例说明了这一点。