输入维度错误在pytorch的前向检查

我正在使用pytorch创建一个RNN,它的结构如下:

class MyRNN(nn.Module):    def __init__(self, batch_size, n_inputs, n_neurons, n_outputs):        super(MyRNN, self).__init__()        self.n_neurons = n_neurons        self.batch_size = batch_size        self.n_inputs = n_inputs        self.n_outputs = n_outputs        self.basic_rnn = nn.RNN(self.n_inputs, self.n_neurons)        self.FC = nn.Linear(self.n_neurons, self.n_outputs)    def init_hidden(self, ):        # (num_layers, batch_size, n_neurons)        return torch.zeros(1, self.batch_size, self.n_neurons)    def forward(self, X):        self.batch_size = X.size(0)        self.hidden = self.init_hidden()        lstm_out, self.hidden = self.basic_rnn(X, self.hidden)        out = self.FC(self.hidden)        return out.view(-1, self.n_outputs)

我的输入x看起来像这样:

tensor([[-1.0173e-04, -1.5003e-04, -1.0218e-04, -7.4541e-05, -2.2869e-05,         -7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,         -9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01],        [-1.1193e-04, -1.6928e-04, -1.0218e-04, -7.4541e-05, -2.2869e-05,         -7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,         -9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01],        ...        [-6.9490e-05, -8.9197e-05, -1.0218e-04, -7.4541e-05, -2.2869e-05,         -7.7171e-02, -4.4630e-03, -5.0750e-05, -1.7911e-04, -2.8082e-04,         -9.2992e-06, -1.5608e-05, -3.5471e-05, -4.9127e-05, -3.2883e-01]],       dtype=torch.float64)

这是一个包含64个向量的批次,每个向量的大小为15。

当我尝试通过以下方式测试这个模型时:

BATCH_SIZE = 64N_INPUTS = 15N_NEURONS = 150N_OUTPUTS = 1model = MyRNN(BATCH_SIZE, N_INPUTS, N_NEURONS, N_OUTPUTS)model(x)

我得到了以下错误:

File "/home/tt/anaconda3/envs/venv/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 126, in check_forward_args    expected_input_dim, input.dim()))RuntimeError: input must have 3 dimensions, got 2

我该如何修复它?


回答:

你缺少了RNN层所需的一个维度。

根据文档,你的输入大小需要是(序列长度,批次大小,输入大小)的形状。

所以 – 在上面的例子中,你缺少了其中一个维度。根据你的变量名,看起来你试图传递64个每个包含15个输入的样本…如果这是真的,你缺少的是序列长度。

对于RNN,序列长度是你希望层重复执行的次数。例如,在NLP中,你的序列长度可能等于句子中的单词数量,而批次大小则是你传递的句子数量,输入大小则是每个单词的向量大小。

如果你只是想使用64个大小为15的样本,你可能并不需要使用RNN。

Related Posts

Flatten and back keras

我正在尝试使用自编码器获取简单向量中的值 这是我的代码…

如何按索引访问PyTorch模型参数

如果我的网络有10层,包括偏置项,如何仅通过索引访问第…

Python中多元逻辑回归显示错误

我试图使用逻辑回归进行预测,并使用Python和skl…

在MACOS上安装NLTK

我在我的2015款Mac Pro上尝试安装NLTK,操…

如何在R中将通过RFE选择的变量插入到机器学习模型中?

我想使用递归特征消除方法来选择最重要的特征,然后将这些…

CountVectorizer 错误:ValueError: setting an array element with a sequence

我有一个包含144条学生反馈的数据集,其中有72条正面…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注