我对分别标准化每个图像与标准化整个数据集之间的差异感到好奇。

我正在使用使用tf.estimator构建的tensorflow/models/official/resnet。 tf估算器支持生成tf数据集的输入管道功能。数据集对象应用tf.image.per_image_standardization运算符,该运算符通过从每个像素中减去图像本身的平均值来进行标准化,并强制执行单位差异。

这与其他ML预处理不同,其他ML预处理基于整个数据集的平均值对图像进行标准化,例如使用sklearn.preprocessing.StandardScaler

对于此输入管道的任何方面是否保留在从tf.estimator.Estimator导出的tf SavedModel中,我感到困惑。

因此,我想知道在通过tf.contrib.predictor或以任何其他dnn格式部署模型时为模型提供服务时是否仍需要应用功能标准化。

即使我使用的是per_image_standardization,也应该对数据集应用标准化吗?如果是这样,我是否应该以某种方式从整个图像集中导出平均值,以便在为模型提供服务时,服务器可以从整个数据集中获取平均值并以这种方式应用标准化?

最佳答案

在StandardScaler中,我们进行按功能标准化。对于图像,我们可以考虑整个数据分布,以像素为单位进行归一化,但是由于分布的可变性,这没有帮助。因此,最好使用per_image_standardization,将整个图像标准化为零和std1。这也使学习速度更快。

进一步的this-link可能会有所帮助。在another-link中,作者通过示例进行了解释。

关于python - TensorFlow per_image_standardization与整个数据集的均值标准化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54155481/

10-12 21:10