在 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上的声明。
我想构建一个带有 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上的声明。