Deep Learning---caffe模型参数量(weights)计算
生活随笔
收集整理的這篇文章主要介紹了
Deep Learning---caffe模型参数量(weights)计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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大小不變以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用4bytes的float類型來存儲參數,則總的參數量大小為:
500 + 25000 + 400000 + 5000 + (20 + 50 + 500 + 10) = 431080字節數為:
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/
總結
以上是生活随笔為你收集整理的Deep Learning---caffe模型参数量(weights)计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Deep Learning---py-f
- 下一篇: 封装caffe-windows-mast