pytorch nn.LSTM()参数详解
輸入數(shù)據(jù)格式:
input(seq_len, batch, input_size)
h0(num_layers * num_directions, batch, hidden_size)
c0(num_layers * num_directions, batch, hidden_size)
輸出數(shù)據(jù)格式:
output(seq_len, batch, hidden_size * num_directions)
hn(num_layers * num_directions, batch, hidden_size)
cn(num_layers * num_directions, batch, hidden_size)
import torch
import torch.nn as nn
from torch.autograd import Variable
#構(gòu)建網(wǎng)絡(luò)模型---輸入矩陣特征數(shù)input_size、輸出矩陣特征數(shù)hidden_size、層數(shù)num_layers
inputs = torch.randn(5,3,10) ->(seq_len,batch_size,input_size)
rnn = nn.LSTM(10,20,2) -> (input_size,hidden_size,num_layers)
h0 = torch.randn(2,3,20) ->(num_layers* 1,batch_size,hidden_size)
c0 = torch.randn(2,3,20) ->(num_layers*1,batch_size,hidden_size)
num_directions=1 因?yàn)槭菃蜗騆STM
'''
Outputs: output, (h_n, c_n)
'''
output,(hn,cn) = rnn(inputs,(h0,c0))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
batch_first: 輸入輸出的第一維是否為 batch_size,默認(rèn)值 False。因?yàn)?Torch 中,人們習(xí)慣使用Torch中帶有的dataset,dataloader向神經(jīng)網(wǎng)絡(luò)模型連續(xù)輸入數(shù)據(jù),這里面就有一個(gè) batch_size 的參數(shù),表示一次輸入多少個(gè)數(shù)據(jù)。 在 LSTM 模型中,輸入數(shù)據(jù)必須是一批數(shù)據(jù),為了區(qū)分LSTM中的批量數(shù)據(jù)和dataloader中的批量數(shù)據(jù)是否相同意義,LSTM 模型就通過這個(gè)參數(shù)的設(shè)定來區(qū)分。 如果是相同意義的,就設(shè)置為True,如果不同意義的,設(shè)置為False。 torch.LSTM 中 batch_size 維度默認(rèn)是放在第二維度,故此參數(shù)設(shè)置可以將 batch_size 放在第一維度。如:input 默認(rèn)是(4,1,5),中間的 1 是 batch_size,指定batch_first=True后就是(1,4,5)。所以,如果你的輸入數(shù)據(jù)是二維數(shù)據(jù)的話,就應(yīng)該將 batch_first 設(shè)置為True;
inputs = torch.randn(5,3,10) :seq_len=5,bitch_size=3,input_size=10
我的理解:有3個(gè)句子,每個(gè)句子5個(gè)單詞,每個(gè)單詞用10維的向量表示;而句子的長(zhǎng)度是不一樣的,所以seq_len可長(zhǎng)可短,這也是LSTM可以解決長(zhǎng)短序列的特殊之處。只有seq_len這一參數(shù)是可變的。
關(guān)于hn和cn一些參數(shù)的詳解看這里
而在遇到文本長(zhǎng)度不一致的情況下,將數(shù)據(jù)輸入到模型前的特征工程會(huì)將同一個(gè)batch內(nèi)的文本進(jìn)行padding使其長(zhǎng)度對(duì)齊。但是對(duì)齊的數(shù)據(jù)在單向LSTM甚至雙向LSTM的時(shí)候有一個(gè)問題,LSTM會(huì)處理很多無意義的填充字符,這樣會(huì)對(duì)模型有一定的偏差,這時(shí)候就需要用到函數(shù)torch.nn.utils.rnn.pack_padded_sequence()以及torch.nn.utils.rnn.pad_packed_sequence()
詳情解釋看這里
BiLSTM
BILSTM是雙向LSTM;將前向的LSTM與后向的LSTM結(jié)合成LSTM。視圖舉例如下:
????????????LSTM結(jié)構(gòu)推導(dǎo):
更詳細(xì)公式推導(dǎo)https://blog.csdn.net/songhk0209/article/details/71134698
GRU公式推導(dǎo):(網(wǎng)上的圖看著有點(diǎn)費(fèi)勁,就自己畫了個(gè)數(shù)據(jù)流圖)
---------------------
作者:向陽(yáng)爭(zhēng)渡
來源:CSDN
原文:https://blog.csdn.net/yangyang_yangqi/article/details/84585998
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的pytorch nn.LSTM()参数详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch的LSTM的理解
- 下一篇: pytorch中如何处理RNN输入变长序