首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在输入深度神经网络节点之前对数据进行标准化

如何在输入深度神经网络节点之前对数据进行标准化
EN

Stack Overflow用户
提问于 2019-03-08 10:29:09
回答 1查看 512关注 0票数 1

在将数据提供给TensorFlow模型之前,我遇到了两种标准化方法。第一种方法是使用tf.dataset.per_image_standardization()。此函数分别计算每个图像的均值和stddev。我在官方的TensorFlow resnet cifar10教程中找到了这种方法。https://github.com/tensorflow/models/tree/master/official/resnet在测试阶段,每个图像都是单独标准化的。

第二种方法是计算每个通道样式中整个数据集的平均值和stddev。我在下面的densenet实现中找到了这种方法。https://github.com/taki0112/Densenet-Tensorflow在测试阶段,测试数据集也是作为整个批次进行预处理的。

这两种标准化方法是不等价的。我的问题是:对于第二种标准化方法,如何对单个图像进行预处理以进行推理?我们应该使用什么均值和stddev?我们是否需要使用为训练数据集计算的平均值和stddev,就像在批量标准化中一样?

EN

回答 1

Stack Overflow用户

发布于 2019-03-08 19:32:41

是的,你应该使用训练阶段计算出的平均值和标准差。

一般而言,有两种方法可以进行标准化。假设我们有一个形状为[B, H, W, C]的输入X

  • per feature方法分别对图像的每个点进行归一化。为此,必须在训练阶段计算用于估计每个特征的均值和标准差的形状通道矩阵。
  • per [H, W, C] 方法分别对图像的每个通道进行归一化。这可以通过3种方式来完成:跨训练集的
    • 计算平均值和每个通道的标准差
    • 从大量图像集合中获取统计数据,并在评估阶段使用这些统计数据(例如,在运行中imagenet: 'mean': [0.485, 0.456, 0.406], 'std': [0.229, 0.224, 0.225])
    • Normalize每个通道。计算每个示例(测试阶段)或每个批次(训练阶段)的平均值和标准差,并对每个通道separately.

进行归一化

大多数模型使用“每个通道”的方法,但没有正确的答案。重要的是在训练和测试阶段保持一致。有关更多详细信息,请查看here

编辑:为了迁移学习的目的,最好的选择是逐渐采用新的数据集统计数据。因此,初始化来自旧数据集的统计数据,并在整个微调过程中使用新数据集中的统计数据更新它们。在训练阶段结束时,均值和标准差必须已调整为新的数据集。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55055866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档