DeepLearning之LSTM模型輸入引數

2021-10-03 01:23:26 字數 2623 閱讀 7254

lstm模型 輸入引數理解

(long short-term memory)

lstm是rnn模型的一種變種模式,增加了輸入門,遺忘門,輸出門。

lstm也是在時間序列**中的常用模型。

小白我也是從這個模型入門來開始機器學習的坑。

lstm的基本概念與各個門的解釋已經有博文寫的非常詳細:推薦博文:【譯】理解lstm(通俗易懂版)

這篇文章寫的非常詳細,生動,概念解釋的非常清楚。我也是從這個博文裡開始理解的。

模型引數

模型的調參是模型訓練中非常重要的一部分,調整引數前的重要一步就是要理解引數是什麼意思,才能幫助更好的調整引數。

但是發現在一些實戰模型將**直接放在那裡,但是基本引數只是把定義寫在**,沒有生動的解釋,我一開始看的時候也是一臉懵逼。

在我尋找著寫引數的額定義的時候,往往看不到讓小白一眼就能明白的解釋。

希望從乙個小白的角度來講解我眼中的這些引數是什麼意思,如果有不對,還請指出交流。

lstm 的引數輸入格式

一般表示為[batch_size, time_step, input_size]

中文解釋為[每一次feed資料的行數,時間步長,輸入變數個數]

3.1 分開講解,input_size

如果你使用7個自變數來**1個因變數,那麼input_size=7,output_size=1

如果你使用8個自變數來**3個因變數,那麼input_size=8,output_size=3

這個還是比較好理解的,你的輸入資料,想要通過什麼變數**什麼變數應該是比較清楚的。

難點是另外兩個引數的區別。

3.2 分開講解,batch_size

如果你的資料有10000行,訓練100次把所有資料訓練完,那麼你的batch_size=10000/100=100

如果你的資料有20000行,同樣訓練100次把所有資料訓練完,那麼你的batch_size=20000/100=200

如果你的資料有20000行,訓練50次把所有資料訓練完,那麼你的batch_size=20000/50=400

以此類推

不過只是舉個例子,實際的情況要看你的資料樣本,一般的batch_size小於100,來使你的訓練結果更好,一次feed太多行資料,模型容易吃撐,消化不良,可能需要健胃消食片,哈哈哈哈

3.3 分開講解, time_step

最最最最難理解的就是這個time_step了,我也是琢磨了好久。

首先要知道,time_step是指的哪個過程?

是不是看到的圖都是在畫,輸入了什麼,遺忘了什麼,輸出了什麼,以為每個細胞狀態都是1個time_step?

如果這樣的話,那麼恭喜你,你和我一樣,都是想錯了,其實那些一串的流程細胞狀態圖都是在1個time_step!都是在1個time_step!都是在1個time_step!

是不是很驚訝,很奇怪?

那講的是time_step的內部進行的,而不是在time_step之間。

換句話說,所謂的t-1的遺留狀態也是在乙個time_step裡面的事情,t多少取決於time_step的取值。

此時,再來看看time_step的本身含義,時間步長,時間步長,那麼一定是是和時間有關係啊!!!

重點4.1 batch_size與time_step

之前的batch_size中只是規定了乙個每次feed多少行資料進去,並沒有涵蓋乙個時間的概念進去,

而這個引數剛好就是對於時間的限制,畢竟你是做時間序列**,所以才多了這個引數。

換句話說,就是在乙個batch_size中,你要定義一下每次資料的時間序列是多少?

如果你的資料都是按照時間排列的,batch_size是100的話,time_step=10

在第1次訓練的時候,是用前100行資料進行訓練,而在這其中每次給模型10個連續時間序列的資料。

那你是不是以為應該是1-10,11-20,21-30,這樣把資料給模型?還是不對,請看下圖。

4.2 [batch_size, time_step, input_size]=[30,5,7]

time_step=n, 就意味著我們認為每乙個值都和它前n個值有關係

如果 [batch_size, time_step, input_size]=[30,5,7]

那麼,上圖中,黑色框代表的就是乙個batch_size中所含有的資料的量。

那麼,從上到下的3個紅色框就為 time_step為5的時候,每次細胞輸入門所輸入的資料量。

那麼,列b~列h,一共7列,就為 input_size

4.3 舉例

再看下圖

time_step=n, 就意味著我們認為每乙個值都和它前n個值有關係

假如沒有time_step這個引數, [input_size=7,batch_size=30],一共只需要1次就能訓練完所有資料。

如果有,那麼變成了 [input_size=7,batch_size=30, time_step=5],需要30-5+1=26,需要26次資料連續餵給模型,中間不能停。

在26次中每一次都要把上一次產生的y,與這一次的5行連續時間序列資料一起feed進去,再產生新的y

以此往復,直到此個batch_size 結束。

結語input_size 是根據你的訓練問題而確定的。

time_step是lstm神經網路中的重要引數,time_step在神經網路模型建好後一般就不會改變了。

DeepLearning學習筆記之ReLU函式

一 什麼是稀疏啟用函式 relu relu全稱是rectified liner uints,其具體形式為y max 0,x relu具有 1 單側抑制 2 相對寬闊的興奮邊界 3 稀疏啟用性等優點。二 為什麼relu更有效?生物研究表明 生物神經元只對輸入訊號中很少部分進行響應,大部分訊號則被刻意遮...

Deep Learning之常用模型或者方法

deep learning 深度學習 學習筆記整理系列 zouxy09 qq.com version 1.0 2013 04 08 宣告 1 該deep learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻。3 本人才疏...

Deep Learning 最優化方法之Adam

本文是deep learning 之 最優化方法系列文章的adam方法。主要參考deep learning 一書。deep learning 之 最優化方法 deep learning 最優化方法之sgd deep learning 最優化方法之momentum 動量 deep learning 最...