将完全连接的层转换为卷积层?

时间:2020-06-29 11:53:58

标签: machine-learning deep-learning neural-network conv-neural-network

我已经阅读了另一篇有关将FC层转换为卷积层的文章: https://stats.stackexchange.com/questions/263349/how-to-convert-fully-connected-layer-into-convolutional-layer, 但我不明白您在最近的计算中如何获得4096x1x1。我知道在经过卷积层和池化之后,我们最终得到了7x7x512层

我是从以下github帖子中获得的:https://cs231n.github.io/convolutional-networks/#convert

相反,任何FC层都可以转换为CONV层。例如,一个K = 4096的FC层正在看一些7×7×512大小的输入体积,可以等效地表示为一个CONV层,其F = 7,P = 0,S = 1,K = 4096。换句话说,我们将过滤器的大小设置为恰好是输入体积的大小,因此输出将仅为1×1×4096,因为只有单个深度列“适合”整个输入体积,因此得出的结果与最初的FC层。

这是我不完全理解的数学。在另一篇文章中,作者写道

据我所知,在此示例中,转换后的CONV层应具有形状(7,7,512),即(宽度,高度,要素尺寸)。我们有4096个过滤器。每个滤波器的空间大小的输出可以计算为(7-7 + 0)/ 1 + 1 =1。因此,我们有一个1x1x4096向量作为输出。

但是您从哪里获得其他7个?你自己计算卷积层吗?这就是您最终得到1x1x4096的原因?

考虑我有一个CNN,它由Input(234×234)-Conv(7,32,1)-Pool(2,2)-Conv(7,32,1)-Pool(2,2)Conv组成(7,32,1)-池(2,2)-FC(1024)-FC(1024)-FC(1000)。并且不使用零填充。 如果我没记错的话,运行此过程并计算转换层和池应该使我们在最后的池中保持24x24x32的分辨率。转换层的步幅为1。

  1. 234x234x1> conv7x7x32>(234-7)/ 1 + 1 = 228
  2. 228x228x32> pool2x2>(228-2)/ 2 + 1 = 114
  3. 114x114x32> conv7x7x32>(114-7)/ 1 +1 = 108
  4. 108x108x32> pool2x2>(108-2)/ 2 + 1 = 54
  5. 54x54x32> conv7x7x32>(54-7)/ 1 +1 = 48
  6. 48x48x32> pool2x2>(48-2)/ 2 + 1 = 24
  7. 24x24x32
  8. (24-24)/ 1 +1 = 1> 1024x1x1,1024x1x1,1000x1x1

将FC层转换为卷积层是正确的方法吗?

0 个答案:

没有答案