gol*_*enk 87 python neural-network conv-neural-network tensorflow
最初的问题是关于TensorFlow实现的具体问题.但是,答案仅适用于实施.这个一般答案也是TensorFlow的正确答案.
在TensorFlow中使用批量标准化和dropout(特别是使用contrib.layers)时,我是否需要担心排序?
似乎有可能如果我使用dropout然后立即批量标准化可能会有麻烦.例如,如果批量标准化的偏移训练到训练输出的较大比例数,但是然后将相同的偏移应用于较小的(由于具有更多输出的补偿)标度数而在测试期间没有丢失,那么转移可能会关闭.TensorFlow批量标准化层是否会自动对此进行补偿?或者这不是因为某些原因我不在乎?
此外,在将这两者结合使用时还有其他需要注意的问题吗?例如,假设我使用他们以正确的顺序在问候上述(假设有是一个正确的顺序),可以存在与使用分批正常化和漏失在多个连续层烦恼?我没有立即看到问题,但我可能会遗漏一些东西.
非常感谢!
更新:
实验测试似乎表明排序确实很重要.我运行了相同的网络两次,只有批量规范和退出反向.当辍学率在批量规范之前时,随着训练损失的减少,验证损失似乎在增加.在另一种情况下,他们都会倒下.但就我而言,动作很慢,所以在经过多次训练后情况可能会发生变化,这只是一次测试.一个更明确和知情的答案仍然会受到赞赏.
Zho*_*ang 106
在Ioffe和Szegedy 2015中,作者表示"我们希望确保对于任何参数值,网络始终会产生具有所需分布的激活".因此,批量标准化层实际上是在Conv层/完全连接层之后插入,但在进入ReLu(或任何其他类型)激活之前.有关详细信息,请在53分钟左右观看此视频.
就丢失问题而言,我认为在激活层之后会应用dropout.在丢失纸图3b中,隐藏层1的丢失因子/概率矩阵r(l)在y(1)上被应用于其,其中y(1)是在应用激活函数f之后的结果.
总而言之,使用批量规范化和丢失的顺序是:
- > CONV/FC - > BatchNorm - > ReLu(或其他激活) - > Dropout - > CONV/FC - >
Mil*_*der 28
正如在评论中指出,一个惊人的资源来读起层的顺序是在这里.我已经完成了评论,这是我在互联网上找到的最佳主题资源
我的2美分:
辍学意味着完全阻止来自某些神经元的信息,以确保神经元不会共同适应.因此,批量规范化必须在丢失之后,否则您将通过规范化统计信息传递信息.
如果你考虑一下,在典型的ML问题中,这就是我们不计算整个数据的均值和标准偏差然后将其分成训练集,测试集和验证集的原因.我们拆分然后计算列车集上的统计数据,并使用它们对验证和测试数据集进行标准化和居中
所以我建议方案1(这需要考虑pseudomarvin对已接受答案的评论)
- > CONV/FC - > ReLu(或其他激活) - > Dropout - > BatchNorm - > CONV/FC
而不是计划2
- > CONV/FC - > BatchNorm - > ReLu(或其他激活) - > Dropout - > CONV/FC - >在接受的答案中
请注意,这意味着与方案1下的网络相比,方案2下的网络应显示过度拟合,但OP运行了一些测试,如上所述,他们支持方案2
Jia*_*ang 16
我阅读了答案和评论中的推荐论文\n /sf/answers/2820719961/
\n从Ioffe and Szegedy (2015)\xe2\x80\x99s的角度来看,网络结构中仅使用BN。李等人。(2018) 给出了统计和实验分析,表明当实践者在 BN 之前使用 Dropout 时,会出现方差变化。因此,李等人。(2018) 建议\n在所有 BN 层之后应用 Dropout。
\n从 Ioffe 和 Szegedy (2015)\xe2\x80\x99s 的角度来看,BN 位于\n激活函数内部/之前。然而,陈等人。(2019)\n使用结合了 dropout 和 BN 的 IC 层,Chen 等人。(2019)\n建议在 ReLU 之后使用 BN。
\n安全背景上,我只在网络中使用Dropout或BN。
\n\n\n陈光勇、陈鹏飞、史玉君、谢长宇、廖本本和张胜宇。2019。\xe2\x80\x9c重新思考在深度神经网络训练中批量归一化\n和 Dropout 的使用。\xe2\x80\x9d CoRR \nabs/1905.05928。http://arxiv.org/abs/1905.05928。
\n\n\n约夫、谢尔盖和克里斯蒂安·塞格迪。2015.\xe2\x80\x9c批量归一化:\n通过减少内部协变量\nShift加速深度网络训练。\xe2\x80\x9d CoRR abs/1502.03167。http://arxiv.org/abs/1502.03167。
\n\n\n李翔、陈硕、胡晓林、杨健。2018.\xe2\x80\x9c理解\n方差\nShift 导致的 Dropout 和批量归一化之间的不和谐。\xe2\x80\x9d CoRR abs/1801.05134。http://arxiv.org/abs/1801.05134。
\n\n\nLuk*_*sen 14
Conv - 激活 - DropOut - BatchNorm - Pool --> Test_loss: 0.04261355847120285
Conv - Activation - DropOut - Pool - BatchNorm --> Test_loss: 0.050065308809280396
Conv - Activation - BatchNorm - Pool - DropOut --> Test_loss: 0.04911309853196144
Conv - Activation - BatchNorm - DropOut - Pool --> Test_loss: 0.06809622049331665
Conv - BatchNorm - Activation - DropOut - Pool --> Test_loss: 0.038886815309524536
Conv - BatchNorm - Activation - Pool - DropOut --> Test_loss: 0.04126095026731491
Conv - BatchNorm - DropOut - Activation - Pool --> Test_loss: 0.05142546817660332
Conv - DropOut - Activation - BatchNorm - Pool --> Test_loss: 0.04827788099646568
Conv - DropOut - Activation - Pool - BatchNorm --> Test_loss: 0.04722036048769951
Conv - DropOut - BatchNorm - Activation - Pool --> Test_loss: 0.03238215297460556
在具有 2 个卷积模块(见下文)的 MNIST 数据集(20 个时期)上训练,每次使用
model.add(Flatten())
model.add(layers.Dense(512, activation="elu"))
model.add(layers.Dense(10, activation="softmax"))
Run Code Online (Sandbox Code Playgroud)
卷积层的内核大小为(3,3)
,默认填充,激活为elu
。Pooling 是 poolside 的 MaxPooling (2,2)
。损失为categorical_crossentropy
,优化器为adam
。
对应的 Dropout 概率分别为0.2
或0.3
。特征图的数量分别为32
或64
。
编辑: 当我放弃 Dropout 时,如某些答案中所建议的那样,它收敛得更快,但泛化能力比我使用 BatchNorm和Dropout时差。
xtl*_*luo 11
Dropout
(如果有BN
):Dropout
在某些情况下的需要,因为BN直观上提供了与Dropout相似的正则化好处”Dropout
有关更多详细信息,请参见本文[ 通过方差Shift理解辍学和批处理规范化之间的不和谐 ],如@Haramoz在评论中已经提到的。