首先,这个问题不是关于编程本身,而是关于CNN架构背后的一些逻辑。 我确实理解每一层的工作原理,但我唯一的问题是:将ReLU和卷积层分开是否有意义?我的意思是,ConvLayer是否可以存在并通过使用反向传播来更新其权重而不需要ReLU?
我是这么认为的。这就是我创建以下独立图层的原因:
我正在考虑将第1层和第2层合并为一个。我该怎么办?
答案 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)
没有什么可以阻止渐变更新&在整个网络中反向传播。
你应该怎么做?
在不同的图层之间保持某种形式的非线性。您可以创建包含多个卷积层的卷积块,但是您应该在这些块的末尾包含非线性函数,并且必须在密集层之后。对于致密层,不使用激活功能完全等同于使用单层。
答案 1 :(得分:0)
简短的回答是:ReLU(或其他激活机制)应该添加到每个卷积或完全连接的层中。
CNN和神经网络通常使用像ReLU这样的激活函数来在模型中引入非线性。 激活函数本身通常不是图层,它们是对图层的每个节点的附加计算。您可以将它们视为机制的实现,该机制决定在查找与未查找特定模式之间。 See this post.
答案 2 :(得分:0)
从TensorFlow角度看,您所有的计算都是图中的节点(通常称为会话)。因此,如果要分离层(这意味着将节点添加到您的计算图),请继续,但是我看不到背后的任何实际原因。当然,您可以反向传播它,因为您只是通过推导计算每个函数的梯度。