Pytorch學(xué)習(xí)記錄-Seq2Seq模型實(shí)現(xiàn)(Encoder部分對(duì)比)

一點(diǎn)點(diǎn)總結(jié)
回過頭看看這三天的模型谚鄙,從一般LSTM Seq2Seq -> GRU Seq2Seq -> 基于注意力機(jī)制的 Seq2Seq

LSTM Seq2Seq.png

GRU Seq2Seq.png

基于注意力機(jī)制的 Seq2Seq.png

在構(gòu)建模型的時(shí)候帆调,對(duì)Encoder和Decoder進(jìn)行拆分,最后通過Seq2Seq整合恨闪,如果含有Attention機(jī)制优质,還需要增加attention模塊。

1. 先看三個(gè)模型的Encoder部分

Encoder就是處理輸入Seq的模塊研叫,LSTM 和 GRU Seq2Seq比較類似,區(qū)別在于使用的cell類型(LSTM還是GRU)和輸出結(jié)果(hidden璧针,cell還是只有hidden)嚷炉,attention機(jī)制Seq2Seq復(fù)雜一些,因?yàn)槭请p向的探橱。

1.1 LSTM Seq2Seq Encoder

2層LSTM申屹,數(shù)據(jù)順序從下往上。
Encoder輸入?yún)?shù):

  • input_dim輸入encoder的one-hot向量維度隧膏,這個(gè)和輸入詞匯大小一致哗讥,就是輸入字典長度
  • emb_dim嵌入層的維度,這一層將one-hot向量轉(zhuǎn)為密度向量,256
    詞嵌入在 pytorch 中只需要調(diào)用 torch.nn.Embedding(m, n) 就可以了私植,m 表示單詞的總數(shù)目忌栅,n 表示詞嵌入的維度,是一種降維曲稼,相當(dāng)于是一個(gè)大矩陣索绪,矩陣的每一行表示一個(gè)單詞。
  • hid_dim隱藏和cell的狀態(tài)維度,512
  • n_layers RNN層數(shù)贫悄,這里就是2
  • dropout是要使用的丟失量瑞驱。這是一個(gè)防止過度擬合的正則化參數(shù),0.5

Encoder返回參數(shù):

  • hidden窄坦,隱藏狀態(tài)
  • cell唤反,單元狀態(tài)
    看一下實(shí)現(xiàn)
class Encoder(nn.Module):
    def __init__(self, input_dim, emb_dim, hid_dim, n_layers, dropout):
        super(Encoder,self).__init__()
        self.input_dim=input_dim
        self.emb_dim=emb_dim
        self.hid_dim=hid_dim
        self.n_layers=n_layers
        self.dropout=dropout
        
        self.embedding=nn.Embedding(input_dim,emb_dim)
        self.rnn=nn.LSTM(emb_dim,hid_dim,n_layers,dropout=dropout)
        self.dropout=nn.Dropout(dropout)
    def forward(self, src):
        embedded=self.dropout(self.embedding(src))
        outputs, (hidden,cell)=self.rnn(embedded)
        return hidden ,cell

1.2 GRU Seq2Seq Encoder

和LSTM比較類似,做了單層GRU鸭津,dropout不再作為參數(shù)傳入GRU彤侍,返回結(jié)果只有hidden狀態(tài)
Encoder輸入?yún)?shù):

  • input_dim輸入encoder的one-hot向量維度,這個(gè)和輸入詞匯大小一致逆趋,就是輸入字典長度
  • emb_dim嵌入層的維度盏阶,這一層將one-hot向量轉(zhuǎn)為密度向量,256
    詞嵌入在 pytorch 中只需要調(diào)用 torch.nn.Embedding(m, n) 就可以了,m 表示單詞的總數(shù)目闻书,n 表示詞嵌入的維度名斟,是一種降維,相當(dāng)于是一個(gè)大矩陣魄眉,矩陣的每一行表示一個(gè)單詞砰盐。
  • hid_dim隱藏和cell的狀態(tài)維度,512
  • dropout是要使用的丟失量。這是一個(gè)防止過度擬合的正則化參數(shù)坑律,0.5

Encoder返回參數(shù):

  • hidden岩梳,隱藏狀態(tài)
    看一下實(shí)現(xiàn)
class Encoder(nn.Module):
    def __init__(self, input_dim, emb_dim, hid_dim, dropout):
        super(Encoder,self).__init__()
        
        self.input_dim=input_dim
        self.emb_dim=emb_dim
        self.hid_dim=hid_dim
        self.dropout=dropout
        
        self.embedding=nn.Embedding(input_dim,emb_dim)
        self.rnn=nn.GRU(emb_dim,hid_dim)
        self.dropout=nn.Dropout(dropout)
    def forward(self, src):
        embedded=self.dropout(self.embedding(src))
        outputs, hidden=self.rnn(embedded)
        return hidden

1.3 attention Seq2Seq Encoder

因?yàn)閍ttention機(jī)制這個(gè)差別就比較大,使用單層GRU,通過bidirectional RNN蒋腮,每層可以有兩個(gè)RNN網(wǎng)絡(luò)淘捡,這樣就可以從左到右,從右到左對(duì)輸入seq進(jìn)行觀察池摧,得到上下文向量焦除,從某種意義上說,是一種對(duì)文本的理解作彤。
Encoder輸入?yún)?shù):

  • input_dim輸入encoder的one-hot向量維度膘魄,這個(gè)和輸入詞匯大小一致,就是輸入字典長度
  • emb_dim嵌入層的維度竭讳,這一層將one-hot向量轉(zhuǎn)為密度向量,256
    詞嵌入在 pytorch 中只需要調(diào)用 torch.nn.Embedding(m, n) 就可以了创葡,m 表示單詞的總數(shù)目,n 表示詞嵌入的維度绢慢,是一種降維灿渴,相當(dāng)于是一個(gè)大矩陣,矩陣的每一行表示一個(gè)單詞胰舆。
  • enc_hid_dim encoder隱藏和cell的狀態(tài)維度,512
  • dec_hid_dim decoder隱藏和cell的狀態(tài)維度,512
  • dropout是要使用的丟失量骚露。這是一個(gè)防止過度擬合的正則化參數(shù),0.5

Encoder返回參數(shù):

  • outputs的大小為[src長度, batch_size, hid_dim num_directions]缚窿,其中hid_dim是來自前向RNN的隱藏狀態(tài)棘幸。這里可以將(hid_dim num_directions)看成是前向、后向隱藏狀態(tài)的堆疊倦零。h_1 = [h_1^\rightarrow; h_{T}^\leftarrow], h_2 = [h_2^\rightarrow; h_{T-1}^\leftarrow] 误续,我們也可以將所有堆疊的編碼器隱藏狀態(tài)表示為H = \{h_1,h_2扫茅,...蹋嵌,h_T \}
  • hidden的大小為[n_layers num_directions, batch_size, hid_dim]葫隙,其中[-2,:,:]是在結(jié)束最后時(shí)間步(即在看到最后一個(gè)單詞之后)給出頂層前向RNN隱藏狀態(tài)栽烂。[-1,:停蕉,:]是在結(jié)束最后時(shí)間步之后(即在看到句子中的第一個(gè)單詞之后)給出頂層后向RNN隱藏狀態(tài)。

看一下實(shí)現(xiàn)

class Encoder(nn.Module):
    def __init__(self, input_dim, emb_dim, enc_hid_dim, dec_hid_dim, dropout):
        super(Encoder,self).__init__()
        
        self.input_dim=input_dim
        self.emb_dim=emb_dim
        self.enc_hid_dim=enc_hid_dim
        self.dec_hid_dim=dec_hid_dim
        self.dropout=dropout
        
        self.embedding=nn.Embedding(input_dim,emb_dim)
        self.rnn=nn.GRU(emb_dim,enc_hid_dim,bidirectional=True)
        self.fc=nn.Linear(enc_hid_dim*2,dec_hid_dim)
        self.dropout=nn.Dropout(dropout)
    def forward(self, src):
        embedded=self.dropout(self.embedding(src))
        outputs, hidden=self.rnn(embedded)
        hidden = torch.tanh(self.fc(torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim = 1)))
        return outputs, hidden
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钙态,一起剝皮案震驚了整個(gè)濱河市慧起,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌册倒,老刑警劉巖蚓挤,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡灿意,警方通過查閱死者的電腦和手機(jī)估灿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缤剧,“玉大人馅袁,你說我怎么就攤上這事』脑” “怎么了汗销?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抵窒。 經(jīng)常有香客問我弛针,道長,這世上最難降的妖魔是什么李皇? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任削茁,我火速辦了婚禮,結(jié)果婚禮上掉房,老公的妹妹穿的比我還像新娘茧跋。我一直安慰自己,他們只是感情好圃阳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布厌衔。 她就那樣靜靜地躺著,像睡著了一般捍岳。 火紅的嫁衣襯著肌膚如雪富寿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天锣夹,我揣著相機(jī)與錄音页徐,去河邊找鬼。 笑死银萍,一個(gè)胖子當(dāng)著我的面吹牛变勇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贴唇,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼搀绣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戳气?” 一聲冷哼從身側(cè)響起链患,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓶您,沒想到半個(gè)月后麻捻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纲仍,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年贸毕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郑叠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡明棍,死狀恐怖乡革,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情击蹲,我是刑警寧澤署拟,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站歌豺,受9級(jí)特大地震影響推穷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜类咧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一馒铃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痕惋,春花似錦区宇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至堕虹,卻和暖如春卧晓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赴捞。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工逼裆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赦政。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓胜宇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恢着。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桐愉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容