卷积层到Matconvnet中的全连接层



我试图理解Matconvnet中的MNIST示例是如何设计的。看起来他们正在使用LeNet变体,但是由于我以前没有使用Matconvnet,因此很难在最后一个卷积层和第一个全连接层之间建立连接:

net.layers = {} ;
net.layers{end+1} = struct('type', 'conv', ...
                       'weights', {{f*randn(5,5,1,20, 'single'), zeros(1, 20, 'single')}}, ...
                       'stride', 1, ...
                       'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', ...
                       'method', 'max', ...
                       'pool', [2 2], ...
                       'stride', 2, ...
                       'pad', 0) ;
net.layers{end+1} = struct('type', 'conv', ...
                       'weights', {{f*randn(5,5,20,50, 'single'),zeros(1,50,'single')}}, ...
                       'stride', 1, ...
                       'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', ...
                       'method', 'max', ...
                       'pool', [2 2], ...
                       'stride', 2, ...
                       'pad', 0) ;
net.layers{end+1} = struct('type', 'conv', ...
                       'weights', {{f*randn(4,4,50,500, 'single'),  zeros(1,500,'single')}}, ...
                       'stride', 1, ...
                       'pad', 0) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'conv', ...
                       'weights', {{f*randn(1,1,500,10, 'single'), zeros(1,10,'single')}}, ...
                       'stride', 1, ...
                       'pad', 0) ;
net.layers{end+1} = struct('type', 'softmaxloss') ;

通常,在像Tensorflow和MxNet这样的库中,最后一个卷积层被展平,然后连接到完全连接的卷积层。在这里,据我了解,他们将第一个全连接层解释为一个全连接层,权重{{f*randn(4,4,50,500, 'single'), zeros(1,500,'single')}}为全连接层,但该层仍然给出了三维激活图作为其结果。我不明白这里的"扁平化"是如何发生的。我需要有关如何在此处建立卷积层全连接层连接的帮助。

据我所知,您应该只将全连接层替换为卷积层,该卷积层具有宽度和高度等于输入宽度和高度的过滤器。事实上,在 Matconvnet 中完全连接层之前,您不需要展平数据(平面数据已经1x1xDxN形状(。在您的情况下,使用具有相同输入空间大小的内核,即 4x4 ,将作为 FC 层运行,其输出为 1 x 1 x 500 x B.(B 代表输入中的第四维(

更新:网络架构及其输出在这里可视化,以了解操作流程。

相关内容

  • 没有找到相关文章

最新更新