【问题标题】:CNN architectureCNN架构
【发布时间】:2017-10-20 18:52:30
【问题描述】:

起初,这个问题不是关于编程本身,而是关于 CNN 架构背后的一些逻辑。 我确实了解每一层的工作原理,但我唯一的问题是:将 ReLU 和卷积层分开是否有意义?我的意思是,ConvLayer 是否可以存在并通过使用反向传播来工作和更新其权重,而不需要 ReLU 支持?

我是这么想的。这就是我创建以下独立层的原因:

  1. 卷积层
  2. ReLU
  3. 完全连接
  4. ConvLayer 的转换(将 3D 输出转换为一维) -> 全连接。

我正在考虑将第 1 层和第 2 层合并为一个。我应该去做什么?

【问题讨论】:

    标签: conv-neural-network convolution


    【解决方案1】:

    简短的回答是:应该将 ReLU(或其他激活机制)添加到每个卷积层或全连接层。

    CNN 和神经网络通常使用 ReLU 等激活函数在模型中引入非线性。 激活函数本身通常不是层,它们是对层的每个节点的附加计算。您可以将它们视为在查找与不查找特定模式之间做出决定的机制的实现。 See this post.

    【讨论】:

    • 哦,是的...我在完全连接的神经元上默认使用了 sigmoid 激活函数。只是全连接层有问题:)
    【解决方案2】:

    它可以存在吗?

    是的。它可以。没有什么可以阻止神经网络在模型中没有非线性模块的情况下工作。问题是,跳过两个相邻层之间的非线性模块相当于只是在第 1 层输入线性组合以在第 2 层得到输出

    M1 : 输入 =====> L1 ====> ReLU ====> L2 = ====> 输出

    M2 : 输入 =====> L1 ====> ......... ====> L2 =====> 输出

    M3 : 输入 =====> L1 =====> 输出

    M2 和 M3 是等价的,因为参数会在训练期间自行调整以生成相同的输出。如果中间有任何池化,这可能不是真的,但只要层是连续的,网络结构就是一个大的线性组合(想想 PCA)

    没有什么可以阻止整个网络中的梯度更新和反向传播。

    你应该怎么做?

    在不同的层之间保持某种形式的非线性。您可以创建其中包含超过 1 个卷积层的卷积块,但您应该在这些块的末尾以及密集层之后包含一个非线性函数。对于dense layer,不使用激活函数完全等同于使用单层。

    看看这里Quora : Role of activation functions

    【讨论】:

      【解决方案3】:

      从 TensorFlow 的角度来看,您的所有计算都是图中的节点(通常称为会话)。因此,如果您想分离层,这意味着将节点添加到您的计算图中,请继续,但我看不出它背后有任何实际原因。你当然可以反向传播它,因为你只是用推导计算每个函数的梯度。

      【讨论】:

        猜你喜欢
        • 2019-05-11
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多