如果测试时在训练模式下使用 Batch Normalization 会怎样?

     2023-03-12     150

关键词:

【中文标题】如果测试时在训练模式下使用 Batch Normalization 会怎样?【英文标题】:What if Batch Normalization is used in training mode when testing? 【发布时间】:2018-02-27 16:15:51 【问题描述】:

Batch Normalization 在训练阶段和测试阶段具有不同的行为。

例如在tensorflow中使用tf.contrib.layers.batch_norm时,我们应该在不同阶段为is_training设置不同的值。

我的问题是:如果我在测试时仍然设置is_training=True怎么办?也就是说,如果我在测试阶段仍然使用训练模式怎么办?

之所以提出这个问题,是因为Pix2Pix和DualGAN的发布代码在测试时都没有设置is_training=False。而且如果在测试的时候设置is_training=False的话,生成的图片质量可能会很差。

有人可以解释一下吗?谢谢。

【问题讨论】:

【参考方案1】:

在训练期间,BatchNorm 层尝试做两件事:

估计整个训练集的均值和方差(总体统计) 对输入均值和方差进行归一化,使其表现得像高斯函数

在理想情况下,可以在第二点使用整个数据集的人口统计数据。但是,这些都是未知的,并且在训练期间会发生变化。这还有一些其他问题。

变通方法正在通过

对输入进行归一化
gamma * (x - mean) / sigma + b

基于小批量统计meansigma

在训练期间,小批量统计数据的运行平均值用于近似总体统计数据。

现在,原始 BatchNorm 公式在推理过程中使用整个数据集的近似均值和方差进行归一化。由于网络是固定的,meanvariance 的近似值应该相当不错。虽然现在使用总体统计似乎很有意义,但这是一个关键的变化:从小批量统计到整个训练数据的统计。

当批次不是 iid 或在训练期间具有非常小的批次大小时,这一点至关重要。 (但我也观察到了 32 个批次)。

建议的 BatchNorm 隐含地假设两个统计数据非常相似。特别是,在 pix2pix 或 dualgan 中对大小为 1 的 mini-batch 进行训练会提供非常糟糕的人口统计信息。在这种情况下,它们可能包含完全不同的值。

现在有了一个深度网络,后期层期望输入是标准化的批次(在小批量统计的意义上)。请注意,他们接受过这种特定类型数据的培训。但是使用整个数据集的统计数据违反了推理过程中的假设。

如何解决这个问题?在您提到的实现中,也可以在推理期间使用小批量统计信息。或者使用BatchReNormalization,它引入了两个额外的术语来消除小批量和总体统计之间的差异 或者干脆使用 InstanceNormalization(用于回归任务),这实际上与 BatchNorm 相同,但单独处理批处理中的每个示例,也不使用总体统计信息。

我在研究过程中也遇到过这个问题,现在将 InstanceNorm 层用于回归任务。

【讨论】:

优秀。我知道这里发生了什么。感谢您的热心帮助。

pytorch函数

...后通过以下公式得到归一化之后的batch  注意:在测试阶段计算平均值和方差有两种模式:第一种:通过训练阶段大量batch计算得到的平均值和方差的统计值来代替测试阶段的均值和方差第二种:通过跟随测试阶段batch的平... 查看详情

keras训练完模型,为啥对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?

...然而接下来用model.evaluate对同样的训练集(训练集!不是测试集,一共就400多条数据)进行测试,在过拟合的情况下理论上应该已经完美拟合了才对,然而实际情况如图2,就跟没训练过一样……这是为什么呢参考技术A问题简述... 查看详情

authorize.net 测试在测试模式下失败

...:在测试模式下使用Authorize.net,我如何测试“拒绝”?如果测试模式只是批准我的所有交易,而不管假帐单地址...【问题讨论】:请注意,如果您想测试批准,请使用这些号码:betterlogic.com/roger/2008/02/…【参考 查看详情

使用 BP 神经网络进行深度学习时在训练时获得平坦的误差曲线

...。我正在使用带有Adam优化器的Keras顺序模型。NN为训练和测试提供了80%的总体准确率。谁能解释为 查看详情

吴恩达—神经网络与深度学习—l2w2练习

...mini-batch的大小通常不是1也不是m,而是介于两者之间?A.如果mini-batch的大小是1,那么在你取得进展前,你需要遍历整个训练集B.如果mini-batch的大小是m,就会变成批量梯度下降。在你取得进展前,你需要遍历整个训练集C.如果mini-... 查看详情

tf.layers.batch_normalization 大测试错误

】tf.layers.batch_normalization大测试错误【英文标题】:tf.layers.batch_normalizationlargetesterror【发布时间】:2017-08-3106:33:30【问题描述】:我正在尝试使用批量标准化。我尝试在mnist的简单卷积网络上使用tf.layers.batch_normalization。我的训... 查看详情

batchnormalization的正确打开方式(代码片段)

...tformat,即[batch_size,height,width,channel],则axis应该设定为4,如果为channel_firstformat,则axis应该设定为1.momentum的值用在训练时,滑动平均的方式计算滑动平均值moving_mean和滑动方差moving_variance。后面做更详细的说明。center为True时,添... 查看详情

使用 Testcontainers 和 Liquibase 时在测试之间重置数据库

...ersandLiquibase【发布时间】:2021-06-1707:12:53【问题描述】:如果我在集成测试中使用单例数据库容器,如何在每次测试之前确保数据库处于干净状态(无数据)?代码库使用Liquibase进行数据迁移。【问题讨论】:【参考方案1】:... 查看详情

mybatis批量插入数据性能测试(代码片段)

目录1、准备2、普通for循环批量插入数据测试3、使用MyBatis提供的BATCH模式4、mybatis中直接使用foreach插入数据5、mybatis如何开启batch模式for循环测试批量插入和更新数据,myabtis的Batch模式,mybatis中直接使用foreachsql拼接插入... 查看详情

TensorFlow:当批次完成训练时,tf.train.batch 会自动加载下一批吗?

】TensorFlow:当批次完成训练时,tf.train.batch会自动加载下一批吗?【英文标题】:TensorFlow:doestf.train.batchautomaticallyloadthenextbatchwhenthebatchhasfinishedtraining?【发布时间】:2017-05-3103:27:22【问题描述】:例如,在我创建了操作后,通过... 查看详情

epoch,batch,interation

CIFAR10数据集有50000张训练图片,10000张测试图片。现在选择BatchSize=256对模型进行训练。每个Epoch要训练的图片数量: 训练集具有的Batch个数: 每个Epoch需要完成的Batch个数: 每个Epoch具有的Iteration个数: 每个Epoch中... 查看详情

基础内容

...ut最大值激活函数:4)选择合适的learningrate(学习率):如果学习率(梯度下降的步长)过大,则每次更新模型以后,loss可能不减小;如果学习率过小,则训练过程会太漫长。adaptivelearningrate自适应学习率:  查看详情

epoch,iteration,batch,batch_size

...像通过网络训练一次?(一次前向传播+一次后向传播);测试时,所有测试图像通过网络一次?(一次前向传播)。Caffe不用这个参数。batch_size:1个batch包含的图像数目,通常设为2的n次幂,常用的包括64,128,256。    ... 查看详情

springboot模式下mybatis的batch模式怎么写

publicintaddUserSpace(List<UserSpace>userSpaceList)SqlSessionFactorysqlSessionFactory=sqlSessionTemplate.getSqlSessionFactory();SqlSessions 查看详情

打瞌睡时在后台运行应用程序

...任务后,我正在使用Service运行一些任务。这工作正常。如果手机连续闲置2或3天,则进入打盹模式。打盹模式 查看详情

pytorchepoch,batch,iteration

...。mnist数据集有60000张图片作为训练数据,10000张图片作为测试数据。假设现在选择Batch_Size=100对模型进行训练。迭代30000次。参考:https://www.jianshu.com/p/22c50ded4cf7 查看详情

张量流中的批量标准化 - tf.contrib.layers.batch_norm 在训练中效果很好,但测试/验证结果很差

...批量标准化-tf.contrib.layers.batch_norm在训练中效果很好,但测试/验证结果很差【英文标题】:Batchnormaliztionontensorflow-tf.contrib.layers.batch_normworksgoodontrainingbutpoortesting/validationresults【发布时间】:2017-06-2202:57:02【问题描述】:我尝试... 查看详情

batch_size对网络训练结果的影响

最近在跑一些网络时发现,训练完的网络在测试集上的效果总是会受Batch_Size 大小的影响。这种现象跟以往自己所想象的有些出入,于是出于好奇,各种搜博客,大致得出了自己想要的答案,现写一篇博客记录一下。 在... 查看详情