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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【pytorch】LSTM神经网络

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【pytorch】LSTM神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在處理時序數據,已經有RNN循環神經網絡和GRU神經網絡兩個比較經典的網絡。當然還有一種LSTM神經網絡,長短期記憶神經網絡。
從發展歷史來看,是現有LSTM再有GRU的,但是從復雜度來看,LSTM比GRU更加復雜。

先來回憶一下GRU,其有兩個門(更新門和重置門),有一個記錄歷史信息的向量HtH_tHt?
而LSTM就更加復雜了,無論是在門的數量上還是記錄歷史信息的向量上。

LSTM神經網絡

其一共有3個門,2個狀態。

控制門

遺忘門

這個與GRU中的重置門非常類似,含義也是大致相同。
Ft=Θ(Xt?Wxf+Ht?1?Whf+bf)F_t = \Theta\left(X_t\cdot W_{xf} + H_{t - 1}\cdot W_{hf} + b_f\right) Ft?=Θ(Xt??Wxf?+Ht?1??Whf?+bf?)
而后,FtF_tFt?作用于記憶Ct?1C_{t-1}Ct?1?,遺忘部分歷史信息。

輸入門

它與GRU中的更新門有點類似,但是卻不完全一樣。
因為LSTM有兩個狀態,它可以理解為CtC_tCt?的更新門。
It=Θ(Xt?Wxi+Ht?1?Whi+bi)I_t = \Theta\left(X_t\cdot W_{xi} + H_{t - 1}\cdot W_{hi} + b_i\right) It?=Θ(Xt??Wxi?+Ht?1??Whi?+bi?)
其后會作用于候選記憶Ct′C'_tCt?,更新得出新的CtC_tCt?

輸出門

它與GRU中的更新門有點類似,但是卻不完全一樣。
因為LSTM有兩個狀態,它可以理解為HtH_tHt?的更新門。
Ot=Θ(Xt?Wxo+Ht?1?Who+bo)O_t = \Theta\left(X_t\cdot W_{xo} + H_{t - 1}\cdot W_{ho} + b_o\right) Ot?=Θ(Xt??Wxo?+Ht?1??Who?+bo?)
其后會作用于候選記憶CtC_tCt?,更新得出新的HtH_tHt?

狀態

記憶狀態

從整個更新過程可以看到,Ct?1C_{t-1}Ct?1?先遺忘部分信息,再與候選記憶(根據XtX_tXt?)生成出的部分信息合并,得到CtC_tCt?
其的變化是較為緩慢的,也被成為長期記憶。

隱狀態

HtH_tHt?根據目前的輸出(XtX_tXt?Ht?1H_{t-1}Ht?1?的結果)與當前記憶CtC_tCt?作用的結果。相比于CtC_tCt?HtH_tHt?Ht?1H_{t-1}Ht?1?關系更弱,因此HtH_tHt?變化更加的快。因此也被稱為短期記憶。

結合上述兩個狀態:長期記憶與短期記憶,其就被稱為長短期記憶神經網絡。

代碼實現

pytorch也提供了對于的LSTM層,可以十分方便的調用。
但是需要自己定義創始狀態值(一個二元組)。

class LSMT_Net(nn.Module):def __init__(self, vocab_size, hidden_size, **kwargs):super(LSMT_Net, self).__init__(**kwargs)self.vocab_size = vocab_sizeself.hidden_size = hidden_sizeself.LSMTlayer = nn.LSTM(vocab_size , hidden_size, num_layers= 2)self.L1 = nn.Linear(hidden_size , vocab_size)def forward(self, inputs, state):X = F.one_hot(inputs.T.long(), self.vocab_size) # 轉變成一個只有一個1,其余都是0的向量X = X.to(torch.float32) Y , state = self.LSMTlayer(X , state)Y = Y.reshape((-1 , Y.shape[-1]))Y = self.L1(Y)return Y , statedef begin_state(self , batch_size):return (torch.zeros(self.LSMTlayer.num_layers , batch_size , self.hidden_size),torch.zeros(self.LSMTlayer.num_layers , batch_size , self.hidden_size))

總結

以上是生活随笔為你收集整理的【pytorch】LSTM神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

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