在訓練完乙個網路儲存模型以後,我常常會將最優的模型儲存,放在資料夾中以備用到!但會想模型的大小是由什麼決定的呢?其實我們的模型在我們確定網路結構以後就已經將模型的大小確定了。下面將具體介紹一下:
對於上圖我們可以逐步計算
輸入: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網路前向計算模擬圖:
整個網路佔據權重的為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 位元組),基本接近,因為模型中可能還帶有附加特性引數。
從上我們看出,在我們確定了網路的基本結構時模型大小就已經確定了。
我們在對乙個網路進行訓練時,常常使用一些預訓練模型,這些預訓練模型往往決定了我們最後模型的大小!
指標大小由什麼決定
字長 在同一時間中處理二進位制數的位數叫字長 cpu處理能力 通常稱處理字長為8位資料的cpu叫8位cpu,32位cpu就是在同一時間內處理字長為32位的二進位制資料。二進位制的每乙個0或1是組成二進位制的最小單位,稱為乙個位元 bit 一般說來,計算機在同一時間內處理的一組二進位制數稱為乙個計算機...
深度學習baseline模型 深度學習模型訓練流程
工作中訓練了很多的深度學習模型,目前到了上公升到方 的角度來看了。日常工作中有的人可能已經在遵循方 做事,可能自己沒有注意,有的人可能沒有遵循方 在做事,雖然可能最後的結果差不多,但花費的時間和精力應該會差別很大,當然這是我自己的感受。我們不必完全按照方 來做,但基本流程跟方 應該一致。下面的具體步...
《深度學習 實戰caffe》 繪製網路模型
python draw net.py,這個檔案,就是用來繪製網路模型的。也就是將網路模型由prototxt變成一張。在繪製之前,需要先安裝兩個庫 安裝 raphviz sudo apt get install graphviz注意,這裡用的是apt get來安裝,而不是pip.2 安裝pydot s...