您的位置:首页 > Web前端

Deep Learning---caffe模型参数量(weights)计算

2017-08-16 16:21 585 查看

Draw_convnet



这幅图是通过开源的工具draw_convnet(https://github.com/gwding/draw_convnet)生成的。在清楚整个前向计算网络中的每一个层的输入输出以及参数设置后可以自己手动画出计算图出来,对于参数量计算就很直观了。

feature map大小计算

输入:N0*C0*H0*W0
输出:N1*C1*H1*W1
输出的feature map大小:
H1=(H0+2×pad−kernel_size) / stride+1
W1=(W0+2×pad−kernel_size) / stride+1
当输入的H0 == W0时,公式可以简化为:
H1=W1=(h + 2xpad - kernel_size) / stride + 1
注:当stride为1时,若pad=(kernel_size−1)  / 2,那么经过计算后的feature map大小不变
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8

以LeNet-5为例

下面是一个多通道图像的输入LeNet-5网络前向计算模拟图:



网状立体格子表示kernel,其他颜色方图表示feature map(Input表示输入层,可以看做特殊的feature map)
一个kernel对应一个feature map
参数量主要为kernel大小
每个kernel带一个bias
整个网络占据权重的为Convolution/Innerproduct 两层,分别计算参数量为,:

C1: 5 x 5 x 20 =  500,5x5卷积核, 20个feature map输出,20个kernel
C2: 20x 5 x 5 x 50 = 25000 ,20维度输入,则20x5x5 kernel,50个feature map输出,即相当于20通道的图像输入,则需要20x5x5的kernel来卷积乘,50个这样的卷积核操作得到50个feature map,50个kernel
F1: 50x4x4x500 = 400000,50维度特征图输入,全连接,每个点做卷积乘,则kernel大小为50x4x4,共500个feature map输出,500个kernel
F2 : 500x1x1x10 = 5000,500维度特征图输入,全连接,kernel大小为500x1x1,共10个feature map输出,10个kernel
1
2
3
4
1
2
3
4
用4bytes的float类型来存储参数,则总的参数量大小为:

500 + 25000 + 400000 + 5000 + (20 + 50 + 500 + 10) =  431080
1
1
字节数为:

431080 x 4 = 1724320 ≈ 1683.90625kb ≈ 1.64M


对比实际LeNet-5网络基于caffe训练出来的模型大小为:1.64 MB (1,725,025 字节),基本接近,因为模型中可能还带有附加特性参数。

参考资料:

http://blog.csdn.net/cheese_pop/article/details/51955915

http://timdettmers.com/2015/03/26/convolution-deep-learning/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: