LeNet
首先计算一下最简单的LeNet。网络结构如下:
参数总量: 61706 61495
参数内存消耗: 240.214KB
AlexNet
Alexnet的结构图有些奇怪。但其实是因为要把网络拆分到两个GPU上,才画成了两层,两层的结构是一样的,下面计算的时候的结构相当于合并以后的网络。
参数总量: 62369155
参数内存消耗: 237.9195MB
VGG
VGG常见有16层和19层的,这里以16层为例,下面是模型结构图。
参数总量: 138357544 138348355
参数内存消耗: 527.7570MB
GoogleNet
googlenet 提出了inception的概念,用于增加网络深度和宽度,提高深度神经网络性能。下面是googlenet的网络结构:
inception的结构如下:
可以看出,inception的结构是多个卷积堆叠,组合而成的。
还有,从上面的网络结构中,可以看到一共有三个输出的分类层:
这个是为了解决深层网络训练的时候梯度消失的问题,所以在中间加入了几个全连接层辅助训练。
最后,贴一个论文上给出的模型的结构图:
在这个图上,已经给出了参数的数量和使用的内存,不过我还是说一下inception模块的计算方法和一些注意事项。
- 首先是输入,输入的size应该为224x224x3
- 注意第一层的卷积,没有注明padding,直接算的话,结果是不对的,这里的padding计算方法和tensorflow中卷积方法padding参数设置为’SAME’是一样的。简单来说,就是ceil(size/kernel_size),这个对于下面的计算也是一样的,总之,就是要填适当的0,使得输出结果和上图相对应就是了。
- 在上图中5~10列对应inception module中的各个卷积操作,对应的值是输出的feature的数量,对于maxpool操作,他的padding为2,stride为1。
- 当一个inception模块计算完后,它的输出为各个卷积操作输出的结果连接起来,也就是如果输出分别为28x28x64、28x28x128、28x28x32、28x28x32,那么最终输出就是28x28x(63+128+32+32)。
- 下面的图给出了inception module内部计算的输出结果。
可以看出googlenet的参数量要比vgg少很多,但是效果确更优秀。
Resnet
关于resnet,我就不打算计算参数了,因为实在量很大,而且实际上,resnet的基本结构也比较简单,计算方法和前面的没什么差别。这里就简单贴一下结构图好了。
可以看出来,如果没有中间一条条连线,其实就是一个很深的普通的卷积网络,中间的连线可以保证梯度可以传递到低层,防止梯度消失的问题。
---------------------
作者:qian99
来源:CSDN
原文:https://blog.csdn.net/qian99/article/details/79008053
版权声明:本文为博主原创文章,转载请附上博文链接!
---------------------
作者:qian99
来源:CSDN
原文:https://blog.csdn.net/qian99/article/details/79008053
版权声明:本文为博主原创文章,转载请附上博文链接!