pytorch nn.LSTM()參數詳解

函數
class torch.nn.LSTM(*args, **kwargs)

參數列表

  • input_size:x的特徵維度
  • hidden_size:隱藏層的特徵維度
  • num_layers:lstm隱層的層數,默認爲1
  • bias:False則bih=0和bhh=0. 默認爲True
  • batch_first:True則輸入輸出的數據格式爲 (batch, seq, feature)
  • dropout:除最後一層,每一層的輸出都進行dropout,默認爲: 0
  • bidirectional:True則爲雙向lstm默認爲False
    輸入:input, (h0, c0)
    輸出:output, (hn,cn)

輸入數據格式:

input(seq_len, batch, input_size)
h0(num_layers * num_directions, batch, hidden_size)
c0(num_layers * num_directions, batch, hidden_size)

輸出數據格式:

output(seq_len, batch, hidden_size * num_directions)
hn(num_layers * num_directions, batch, hidden_size)
cn(num_layers * num_directions, batch, hidden_size)

num_directions指的是單向(值爲1)還是雙向(值爲2)。

import torch
import torch.nn as nn
from torch.autograd import Variable

# 構建網絡模型---輸入矩陣特徵數input_size、輸出矩陣特徵數hidden_size、層數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               # 因爲是單向LSTM

output,(hn,cn) = rnn(inputs,(h0,c0))

print(output.size())
print(hn.size())
print(cn.size())

'''輸出
torch.Size([5, 3, 20])
torch.Size([2, 3, 20])
torch.Size([2, 3, 20])
'''

batch_first 輸入輸出的第一維是否爲 batch_size,默認值 False。因爲 Torch 中,人們習慣使用Torch中帶有的dataset,dataloader向神經網絡模型連續輸入數據,這裏面就有一個 batch_size 的參數,表示一次輸入多少個數據。 在 LSTM 模型中,輸入數據必須是一批數據,爲了區分LSTM中的批量數據和dataloader中的批量數據是否相同意義,LSTM 模型就通過這個參數的設定來區分。 如果是相同意義的,就設置爲True,如果不同意義的,設置爲False。 torch.LSTM 中 batch_size 維度默認是放在第二維度,故此參數設置可以將 batch_size 放在第一維度。如:input 默認是(4,1,5),中間的 1 是 batch_size,指定batch_first=True後就是(1,4,5)。所以,如果你的輸入數據是二維數據的話,就應該將 batch_first 設置爲True;

發佈了298 篇原創文章 · 獲贊 41 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章