[英]How should I use num_layers in pytorch LSTM model?
嗨,我是 RNN 和 pytorch 的新手。 我正在实施一个模型来预测数据。 我首先只使用单层,结果很好。 现在我想提高模型的准确性,并想在 LSTM 中使用 2 层。 但是,LSTM 的输出对我来说很奇怪。
我期待有一个 [1, 8] 输出。 但是,使用num_layers=2
我得到 [2, 8] 结果。 这个结果什么意思? 我应该使用哪个作为 LSTM 的结果?
这是我的代码:
class LSTM(nn.Module):
def __init__(self, input_dim, hidden_dim, num_layers, output_dim):
super(LSTM, self).__init__()
self.input_dim = input_dim
self.output_dim = output_dim
self.hidden_dim = hidden_dim
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size=input_dim, hidden_size=hidden_dim,
num_layers=num_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
#x = Variable(torch.Tensor(x).cuda())
h_0 = Variable(torch.zeros(
self.num_layers, x.size(0), self.hidden_dim).cuda())
c_0 = Variable(torch.zeros(
self.num_layers, x.size(0), self.hidden_dim).cuda())
# Propagate input through LSTM
ula, (h_out, _) = self.lstm(x, (h_0, c_0))
out = self.fc(h_out).cuda()
return out
h_out 的形状为 (hidden_size,numlayers)。 如果要将其传递给输出层 fc,则需要对其进行整形/展平,并将输出层的大小增加到 hidden_size*numlayers。
class LSTM(nn.Module):
def __init__(self, input_dim, hidden_dim, num_layers, output_dim):
super(LSTM, self).__init__()
self.input_dim = input_dim
self.output_dim = output_dim
self.hidden_dim = hidden_dim
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size=input_dim, hidden_size=hidden_dim,
num_layers=num_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim*num_layers, output_dim)
def forward(self, x):
#x = Variable(torch.Tensor(x).cuda())
h_0 = Variable(torch.zeros(
self.num_layers, x.size(0), self.hidden_dim).cuda())
c_0 = Variable(torch.zeros(
self.num_layers, x.size(0), self.hidden_dim).cuda())
# Propagate input through LSTM
ula, (h_out, _) = self.lstm(x, (h_0, c_0))
out = h_out.transpose(0,1)
out = out.reshape(-1,hidden_dim*num_layers)
out = self.fc(out).cuda()
return out
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.