CNN架构

时间:2017-05-20 20:14:59

标签: conv-neural-network convolution

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

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

  1. ConvLayer
  2. RELU
  3. 完全连接
  4. ConvLayer的转换(将3D输出转换为一维) - >完全连接。
  5. 我正在考虑将第1层和第2层合并为一个。我该怎么办?

3 个答案:

答案 0 :(得分:1)

可以存在吗?

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

M 1 :输入=====> L 1 ====> ReLU ====> L 2 =====>输出

M 2 :输入=====> L 1 ====> ......... ====> L 2 =====>输出

M 3 :输入=====> L 1 =====>输出

M 2 & M 3 是等效的,因为参数在训练周期内自行调整以产生相同的输出。如果之间存在任何池,则可能不是这样,但只要层是连续的,网络结构只是一个大的线性组合(Think PCA)

没有什么可以阻止渐变更新&在整个网络中反向传播。

你应该怎么做?

在不同的图层之间保持某种形式的非线性。您可以创建包含多个卷积层的卷积块,但是您应该在这些块的末尾包含非线性函数,并且必须在密集层之后。对于致密层,不使用激活功能完全等同于使用单层。

在这里查看Quora : Role of activation functions

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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