pytorch中LSTM各參數理解


nn.LSTM(input_dim,hidden_dim,nums_layer,batch_first)
各參數理解:

  • input_dim:輸入的張量維度,表示自變量特征數
  • hidden_dim:輸出張量維度
  • bias:True or False 是否使用偏置
  • batch_first:True or False,nn.LSTM 接收的輸入是(seq_len,batch_size,input_dim),將batch_first設置為True將輸入變為(batch_size,seq_len,input_dim)
  • dropout:除了最后層外都引入隨機失活
  • bidirectional:True or False 是否使用雙向LSTM

舉例:10000個句子,每個句子10個詞,batch_size=10,embedding_size=300(input_dim)

此時各個參數為:

  • input_size=embedding_size=300
  • batch=batch_size=10
  • seq_len=10
  • 另外設置hidden_dim=128,num_layers=2
	import torch
	import torch.nn as nn
	from torch.autograd import Variable

	rnn = nn.LSTM(input_size=300,hidden_size=128,num_layers=2)
	inputs = torch.randn(10,10,300)#輸入(seq_len, batch_size, input_size) 序列長度為10 batch_size為10 輸入維度為300
	h_0 = torch.randn(2,10,128)#(num_layers * num_directions, batch, hidden_size)  num_layers = 2 ,batch_size=10 ,hidden_size = 128,如果LSTM的bidirectional=True,num_directions=2,否則就是1,表示只有一個方
	c_0 = torch.randn(2,10,128)#c_0和h_0的形狀相同,它包含的是在當前這個batch_size中的每個句子的初始細胞狀態。h_0,c_0如果不提供,那么默認是0
	num_directions=1#   因為是單向LSTM

	#輸出格式為(output,(h_n,c_n))
	output,(h_n,c_n) = rnn(inputs,(h0,c0))#輸入格式為lstm(input,(h_0, c_0))
	print("out:", output.shape)
	print("h_n:", h_n.shape)
	print("c_n:", c_n.shape)

	輸出結果:
	out: torch.Size([10, 10, 128])
	h_n: torch.Size([2, 10, 128])
	c_n: torch.Size([2, 10, 128])

輸出結果:

  • output的shape為(seq_len=5,batch_size=3,num_directions*hidden_size),hidden_size為20,num_directions為1。它包含的LSTM的最后一層的輸出特征(h_t),t是batch_size中每個句子的長度。
  • h_n.shape為(num_directions*num_layers=2,batch_size=3,hidden_size=20)
  • c_n.shape==h_n.shape
  • h_n是句子最后一個單詞的隱藏狀態,c_n包含句子最后一個單詞的細胞狀態,它們與句子長度無關
  • LSTM中的隱藏狀態就是輸出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM