【问题标题】:Is batchnorm used in neural networks that are not CNN?不是 CNN 的神经网络中是否使用了 batchnorm?
【发布时间】:2018-04-27 04:24:20
【问题描述】:

1.) Batchnorm 始终用于深度卷积神经网络。但是它是否也用于非CNN。在NN。在只有全连接层的网络中?

2.) 浅层 CNN 中是否使用了 batchnorm?

3.) 如果我有一个带有输入图像和输入数组 IN_array 的 CNN,则输出是最后一个全连接层之后的数组。我称这个数组为 FC_array。如果我想将 FC_array 与 IN_array 连接起来。

CONCAT_array = tf.concat(values=[FC_array, IN_array])

在 concat 层之后有一个 bachnorm 有用吗?或者那个batchnorm应该在concat层之前的FC_array之后?

有关信息,IN_array 是一个 tf.one_hot() 向量。

谢谢

【问题讨论】:

    标签: tensorflow neural-network


    【解决方案1】:

    TL;DR:1. 是 2. 是 3. 否


    TS;WM
    1. Batch normalization 是 Sergey Ioffe 和 Christian Szegedy 在 2015 年初的一项伟大发明。在那个时候,与消失或爆炸梯度作斗争是一个日常问题。如果您想深入了解,请阅读该文章。但基本上,摘要中的这句话应该会给你一些想法:

    训练深度神经网络很复杂,因为每一层的输入分布在训练过程中会随着前一层的参数变化而变化。这通过需要较低的学习率和仔细的参数初始化来减慢训练速度,并且众所周知地难以训练具有饱和非线性的模型。我们将此现象称为内部协变量偏移,并通过对层输入进行归一化来解决该问题。

    事实上,他们确实首先对 DCNN 使用了批量归一化,这使得它们在 ImageNet 前 5 分类中的表现超过了人类的表现,但是任何存在非线性的网络都可以从批量归一化中受益。包括一个由全连接层组成的网络。

    1. 是的,它也用于浅层 CNN-s。任何超过一层的网络都可以从中受益,尽管更深的网络确实会带来更多的好处。

    2. 首先,one-hot 向量应该永远被规范化。归一化意味着您减去均值并除以方差,从而创建具有 0 均值和 1 方差的数据集。如果对 one-hot 向量执行此操作,则交叉熵损失计算将完全关闭。其次,单独规范化连接层没有意义,因为它不会更改值,只是将它们连接起来。批量标准化是在层的 input 上完成的,因此 concat 之后的那个将获得连接的值,如果需要,可以这样做。

    【讨论】:

    • 这是有用的上下文。你能详细说明一下 CNN 批量标准化通常在哪里使用吗?我知道它通常在给定层的非线性激活层之前应用。但是我还没有找到最佳实践,是否应该在密集、卷积和最大池化层之后应用它,或者只是其中的一个子集。
    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 2018-06-15
    • 2017-04-18
    • 1970-01-01
    • 2017-02-19
    • 2019-08-03
    • 2011-07-24
    • 2015-04-02
    相关资源
    最近更新 更多