cnn、lstm引數計算
一、cnn引數計算
假設輸入7*7*3,卷積核3*3*2,stride=(1,1),輸出是3*3*2
引數量計算:fileter_size✖️input_channel✖️output_channel
解釋:引數量與輸入尺寸無關,只是卷積核的引數,每一個卷積核首先對input_feature所有通道做卷積,得到 n*n*input-channel,然後input_channel個n*n 的feature_map相同位置數目相加,再➕bias,得到n*n*1的feature_map輸出,因為有output_channel個filter,所以輸出n*n*output*channel(通俗容易想象的解釋)
二、lstm引數計算
lstm原理圖,一個綠色框是一個cell,上邊一行S(t)表示長時記憶,下邊一行h(t)表示短時記憶
每一個小黃框代表一個前饋網路層,對,就是經典的神經網路的結構,num_units就是這個層的隱藏神經元個數,就這麼簡單。其中1、2、4的啟用函式是 sigmoid,第三個的啟用函式是 tanh。
1、 cell 的狀態是一個向量,是有多個值的
2、 上一次的狀態 h(t-1)和下一次的輸入 x(t) 結合(concat)起來的,向量直接拼起來,比如 x是28位的向量,h(t-1)是128位的,那麼拼起來就是156位的向量。
3、 cell 的權重是共享
4、那麼一層的 LSTM 的引數有多少個?根據第 3 點的說明,我們知道引數的數量是由 cell 的數量決定的,這裡只有一個 cell,所以引數的數量就是這個 cell 裡面用到的引數個數。假設 num_units 是128,輸入是28位的,那麼根據上面的第 2 點,可以得到,四個小黃框的引數一共有 (128+28)*128*4,也就是156 * 512,可以看看 TensorFlow 的最簡單的 LSTM 的案例,中間層的引數就是這樣,不過還要加上輸出的時候的啟用函式的引數,假設是10個類的話,就是128*10的 W 引數和10個bias 引數
5、lstm網路的unit在深度學習網路框架中是指一層的output size(hidden size),相當於MLP一層的神經元數目,lstm的一個cell相當於一層lstm。
總結:units_num=y,input_size=m*x,bias=y,輸入和上一時刻h(t-1)是concat關係
rnn引數量(x+y)✖️y+y
lstm因為有四個單元,4*【(x+y)✖️y+y】
參考:https://www.zhihu.com/question/64470274/answer/256379387
寫的比較詳細的一個lstm介紹:http://www.cnblogs.com/wangduo/p/6773601.html?utm_source=itdadao&utm_medium=referral