我想用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)
请阅读官方维基上的声明以获取更多信息。