在 Pytorch 的编码器中使用 LSTM 层

Using the LSTM layer in encoder in Pytorch

我想构建一个带有 LSTM 层的自动编码器。但是,在编码器的第一步,我得到了一个错误。你能帮我吗? 这是我尝试构建的模型:

import numpy 
import torch.nn as nn

r_input    = torch.nn.LSTM(1, 1, 28) 
activation  = nn.functional.relu
mu_r      = nn.Linear(22, 6)
log_var_r = nn.Linear(22, 6)

y = np.random.rand(1, 1, 28)
def encode_r(y):
    y         = torch.reshape(y, (-1, 1, 28)) # torch.Size([batch_size, 1, 28])
    hidden    = torch.flatten(activation(r_input(y)), start_dim = 1)       
    z_mu      = mu_r(hidden)
    z_log_var = log_var_r(hidden)
    return z_mu, z_log_var 

但是我的代码中出现了这个错误:

RuntimeError: input.size(-1) must be equal to input_size. Expected 1, got 28. 

您没有以正确的方式创建图层。 torch.nn.LSTM 需要 input_size 作为第一个参数,但您的张量的维度为 28。您似乎希望编码器输出维度为 22 的张量。您还将批次传递为第一维,因此您需要包含 batch_first=True 作为参数。

r_input = torch.nn.LSTM(28, 22, batch_first=True)

这应该适用于您的特定设置。你还应该注意到 LSTM returns 2 项,第一项是你要使用的。

hidden = torch.flatten(activation(r_input(y)[0]), start_dim=1)

更多信息请阅读官方wiki上的声明。