python - pytorch前向检查输入尺寸错误

标签 python python-3.x machine-learning 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 = 64
N_INPUTS = 15
N_NEURONS = 150
N_OUTPUTS = 1
model = 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 层所需的维度之一。

根据 documentation ,您的输入大小需要具有形状(序列长度、批处理、输入大小)。

因此,在上面的示例中,您缺少其中之一。根据您的变量名称,您似乎正在尝试传递 64 个示例,每个示例有 15 个输入...如果这是真的,则说明您缺少序列长度。

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

如果您只是尝试使用大小为 15 的 64 个样本,则这里可能不需要 RNN。

关于python - pytorch前向检查输入尺寸错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54749244/

相关文章:

python sqlite 字符串插入

python - 插入字典或如果键已经存在而没有散列两次则失败

python-3.x - 如果onehotencoder应用于训练数据,如何通过测试数据来获得模型预测

amazon-web-services - AWS SageMaker 在同一台机器上托管多个模型(ML 计算实例)

python - TypeError : argument 1 must be pygame. 表面,未列表及更多

Python - 使用 Python 参数对查询应用过滤器

python - 基于python中的子字符串匹配提取整个单词

python - 将带有音乐的 Python 3.6.1 俄罗斯方 block 游戏转换为 exe

python - 如何在 Python elasticsearch 中转义连字符

python - 如何对未标记的数据进行分类?