我已经阅读了另一篇有关将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。
将FC层转换为卷积层是正确的方法吗?