21.循環神經網絡


本課程來自深度之眼deepshare.net,部分截圖來自課程視頻。

循環神經網絡(RNN)是什麼?

RNN:循環神經網絡
·處理不定長輸入的模型
·常用於NLP及時間序列任務(輸入數據具有前後關係)

RNN網絡結構

圖片來源
在這裏插入圖片描述
xt:時刻t的輸入,shape=(1,57)
st:時刻t的狀態值,shape=(1,128)
ot:時刻t的輸出值,shape=(1,18)這裏的18對應的下面姓名分類任務中的18個國家。
U:linear層的權重參數,shape=(128,57),這裏128是神經元的個數,57是輸入數據x的長度
W:linear層的權重參數,shape=(128,128)
V:linear層的權重參數,shape=(57,128)
數據流動過程如下:
x經過U,上個狀態的s經過W,前面兩項加起來再經過V,得到o,具體公式如下:
st=f(Uxt+Wst1)s_t=f(Ux_t+Ws_{t-1})
ot=softmax(Vst)o_t=softmax(Vs_t)
hidden state:隱藏層狀態信息,記錄過往時刻的信息

訓練RNN實現人名分類

問題定義:輸入任意長度姓名(字符串),輸出姓名來自哪一個國家(18分類任務)
數據:https://download.pytorch.org/tutorial/data.zip
Jackie Chan——成龍
Jay Chou——周杰倫
Tingsong Yue——餘霆嵩
在這裏插入圖片描述
思考:計算機如何實現不定長字符串到分類向量的映射?
Chou(字符串)→RNN→Chinese(分類類別)
流程:
1單個字符→數字
2.數字→model
3.下一個字符→數字→model
4.最後一個字符>數字→model→分類向量

for string in [C,h,o,u]:
	1. one-hot: string [0,0.….1.….0]
	2.y,h=model([0,0.…,1.,0],h)

這裏,chou對應的RNN結構如下,目前的應用中,前面三個輸入是不需要的,只需要最後一個輸出y
在這裏插入圖片描述

all_letters=string.ascii_letters+".,;""all_letters:'abcdefghijklmnopqrstuvwxyZABCDEFGHIJKLNINOPORSTUVwXYZ.,;\'
n_letters=lenall letters)#52+5字符總數n letters:57,爲什麼模型中輸入向量的大小是57?因爲有57種字符,然後轉爲onehot向量就是57維的了。

下面的代碼是RNN的init函數中的結構定義:

self.hidden_size=hidden_size 
self.u=nn.Linear(input_size, hidden_size)
self.w=nn.Linear(hidden_size, hidden_size) 
self.v=nn.Linear(hidden_size, output_size)
self.tanh=nn. Tanh()
self.softmax=nn.LogSoftmax(dim=1)

PyTorch中對不定長數據的處理是通過下面的循環實現的,就是結合前一個狀態的隱藏層解決的

for i in range(line_tensor.size()[0]): 
	output, hidden=rnn(line_tensor[i], hidden)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章