去年的时候,微软一帮子人搞了个152层的神经网络!WTF!详情见论文!
论文太长了,今天只分析一下ResNet的核心内容之一,即“Deeper Bottleneck Architectures”(以下简称DBA),论文里的原图是这样的:
Deeper Bottleneck Architectures说实话,画的不怎么样,右边的网络结构就是DBA啦!关于这张图,论文的作者是这么说的
Because of concerns on the training time that we can afford, we modify the building block as a bottleneck design.
就是说,作者考虑到自己GPU的计算能力有限,所以才采用了bottleneck design!说到底还是没钱上1080呗!不过2015年的时候1080还没出来,那他为什么不上TITAN,还是没钱呗!
言归正传,换成bottleneck design以后,网络的参数减少了很多,训练也就相对容易一些。然后我们再看一下原作中的ResNet全貌!
来看50-layer那一栏,在进入到DBA层之前的网络比较简单,分别是:①卷积层"7×7, 64, stride 2"、②BN层、③ReLU层、④池化层"3×3 max pool, stride 2",最终的输出结果是一个大小为 [batch_size, height, width, kernels] 矩阵,很简单,不再赘述,关于BN可以参考这里。
我们深入一下,再看第一个DBA内部,如下图 Inside a DBA
很显然,总共3×3=9层,可是原作毕竟篇幅有限,网络实现的细节不是很清楚,于是我就参考了Ryan Dahl的tensorflow-resnet程序源码,按照Ryan Dahl实现的ResNet,画出了DBA内部网络的具体实现,这个DBA是全网络中第一个DBA的前三层,输入的image大小为[batch_size,56,56,64],输出大小为[batch_size,56,56,256],如下图 Ryan Dahl's DBA
图已经说的很清楚啦!之后的网路就是N个上图的结构叠加!我不太想做过多的说明了,一切尽在图中!!
网友评论
最近比较忙,深度学习都快淡忘了。
卷积以后的输出还是56*56原因是padding=1,我记得我之前的文章有讲过卷积计算,如果你感兴趣的话可以看看。