在Pytorch的编码器中使用LSTM层



我想用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. 

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

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

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

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

请阅读官方维基上的声明以获取更多信息。

相关内容

  • 没有找到相关文章

最新更新