日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lstm需要优化的参数_LSTM的物理结构和一些细节

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lstm需要优化的参数_LSTM的物理结构和一些细节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
海晨威:一幅圖真正理解LSTM的物理結構?zhuanlan.zhihu.com

這個是網上看的最多的圖了,但是在理解lstm的應用過程中的時候這個圖帶來了不少麻煩。

展開之后實際的物理結構是這樣的,1、2圖同顏色的點代表了同一個東西;

問題1:

這里的輸入xt和ht是怎么結合的?比如:

這塊兒很多地方都沒講清楚,實際上就是concat,直接concat起來了:

問題2:LSTM的權重到底是啥樣的?

這里直接以tf.keras的代碼為例子看看就造了:

def build_model(look_back: int, batch_size: int=1) -> Sequential:model = Sequential()model.add(LSTM(units=128,activation='relu',batch_input_shape=(batch_size, look_back, 1),stateful=True,return_sequences=False))model.add(Dense(1, activation='linear'))model.compile(loss='mean_squared_error', optimizer='adam')return model model = build_model(28, batch_size=1)

首先,當我們的units=128的時候,LSTM的最終輸出(僅考慮最后一個時間步輸出,并且不考慮sequence的輸出)就是128維的向量定下來了,對應的輸出就是:

這里的最后一個ht的部分,注意這個ht既可以作為最終的輸出,也是時間中的hidden state輸入到下一個時間點的前向傳播中去。

model.layers[0].trainable_variables

Param <tf.Variable 'lstm_4/lstm_cell_4/recurrent_kernel:0' shape=(128, 512) dtype=float32, numpy=
array([[ 3.0333996e-03, 1.4155725e-02, -3.9381277e-02, ...,
4.0887762e-02, -3.1605218e-02, -1.7439183e-02],
[-5.2204579e-02, 1.6296864e-02, 4.4382092e-02, ...,
2.1501739e-02, 5.1224865e-02, -5.1180001e-02],
[ 1.9754471e-02, -2.7741276e-02, -3.0992866e-02, ...,
1.8080823e-02, -2.1589132e-02, 8.2989247e-04],
...,
[-2.9214425e-05, -2.5351198e-02, -4.1916996e-02, ...,
-5.0040476e-02, -1.1436570e-02, 4.7302879e-02],
[-4.4846401e-02, 3.3629253e-03, 1.7752033e-02, ...,
-4.5454025e-02, -8.5912934e-03, -1.8942051e-02],
[-1.8914735e-02, -4.9705409e-02, -5.3823508e-02, ...,
3.6144644e-02, -2.1415317e-02, 1.5490238e-02]], dtype=float32)>:

(截圖不知道怎么搞的一直上傳失敗)

可以看到,LSTM層一共有3組參數,第一組是512個參數,我們的LSTM的units設置為128,因此

這里的四個門,每一個門對應一個dense層,將input映射為128維,4個門一共4*128=512個參數,對應的就是第1組權重,注意,這里我們的輸入的維度是1,因為就是簡單的序列數據,沒有其它的,所以這里第一個矩陣權重為(1,512),如果是embedding的話,比如embedding的維度是100,那么就是(100,512),tensorflow.keras這里把多個門的權重合并到一起來了。。。看了半天才看明白,其實嚴格一點應該是 4個 1*128的小矩陣,估計是為了工程上的便利和優化直接合并到一起了;

那么第三組的權重也很好理解,就是bias,

512個bias分別分配到這4個門的計算中;

最后是第二組權重,實際上就是

上一個時間步的ht-1到4個門的映射

我們前面說過上一個時間步的ht-1和這個時刻的輸入xt是concat的,所以應該是(128+1)*128*4 這樣比較好理解,不過tf.keras的權重不是按照這樣保存的就是了,所以看代碼的時候會有一點疑惑,不過總算看明白了shift~

問題3 LSTM的兩個dropout是drop啥?

LSTM中有兩個dropout的參數:

一個是

| dropout: Float between 0 and 1. Fraction of the units to drop for the linear
| transformation of the inputs. Default: 0.

這個dropout實際上就是輸入X的dropout,

也就是這個部分做dropout

一個是

| recurrent_dropout: Float between 0 and 1. Fraction of the units to drop for
| the linear transformation of the recurrent state. Default: 0.

是針對于這個部分做dropout,

常規的dropout層是對LSTM最終的輸出進行dropout。

問題四 :stateful LSTM 和 stateless LSTM有啥區別?

首先我們需要知道的是,我們平常大部分時候使用的LSTM都是屬于stateless LSTM。

舉個例子,比如情感分析:

“我 喜歡 你”當我們把這個句子的每個詞embedding之后進入上面的這個LSTM的結構,到最終的時間步后,輸出結束,此時,ht作為輸出接一個分類層完成任務。

這個時候,tf.keras中的LSTM默認會reset_state,也就是

cell state和 hidden state都沒有消失了。然后進入下一個句子的前向傳播;

stateful LSTM則可以將當前句子的最終的cell state和hidden state的輸出作為下個句子的初始的cell state和hidden state。

stateful LSTM:能讓模型學習到你輸入的samples之間的時序特征,適合一些長序列的預測,哪個sample在前,那個sample在后對模型是有影響的。
stateless LSTM:輸入samples后,默認就會shuffle,可以說是每個sample獨立,之間無前后關系,適合輸入一些沒有關系的樣本。詳細可見:尤魚哥:Keras之stateful LSTM全面解析+實例測試?zhuanlan.zhihu.com

很好理解了。

我們在做時間序列預測的時候可以同時考慮stateful LSTM和stateness LSTM看看哪個效果好。

總結

以上是生活随笔為你收集整理的lstm需要优化的参数_LSTM的物理结构和一些细节的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。