Python 使用Pytorch向前传播RNN

Python 使用Pytorch向前传播RNN,python,machine-learning,pytorch,recurrent-neural-network,Python,Machine Learning,Pytorch,Recurrent Neural Network,我正在尝试创建一个RNN前向传递方法,该方法可以接受可变的输入、隐藏和输出大小,并创建所需的RNN单元。对我来说,似乎我正在将正确的变量传递给self.rnn_cell—x和上一个隐藏层的输入值。但是,我收到的错误包括在下面 我也试着按照我的教授的建议使用x[I]和x[:,I,I],但没有用。我很困惑,只是想寻求指导,看看我在这里做的事情是否正确。我的教授建议,由于我不断收到错误,我应该在jupyter笔记本中重新启动内核并重新运行代码。我有,我收到了同样的错误 请让我知道,如果你需要额外的背景

我正在尝试创建一个RNN前向传递方法,该方法可以接受可变的输入、隐藏和输出大小,并创建所需的RNN单元。对我来说,似乎我正在将正确的变量传递给self.rnn_cell—x和上一个隐藏层的输入值。但是,我收到的错误包括在下面

我也试着按照我的教授的建议使用x[I]和x[:,I,I],但没有用。我很困惑,只是想寻求指导,看看我在这里做的事情是否正确。我的教授建议,由于我不断收到错误,我应该在jupyter笔记本中重新启动内核并重新运行代码。我有,我收到了同样的错误

请让我知道,如果你需要额外的背景

class RNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(RNN, self).__init__()
        self.hidden_size = hidden_size

        self.rnn_cell = nn.RNNCell(input_size, hidden_size)
        self.fc = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):
        """
        x: size [seq_length, 1, input_size]
        """
        h = torch.zeros(x.size(1), self.hidden_size)

        for i in range(x.size(0)):
            ### START YOUR CODE ###
            h = self.rnn_cell(x[:,:,i], h)
            ### END YOUR CODE ###

        ### START YOUR CODE ###
        # Hint: first call fc, then call softmax
        out = self.softmax(self.fc(self.hidden_size, h.size(0)))
        ### END YOUR CODE ###

        return out 
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)

我不是RNNs的专家,但尝试一下

class RNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
    super(RNN, self).__init__()
    self.hidden_size = hidden_size

    self.rnn_cell = nn.RNN(input_size, hidden_size)
    self.fc = nn.Linear(hidden_size, output_size)


def forward(self, x):
    """
    x: size [seq_length, 1, input_size]
    """
    h = torch.zeros(num_layers(hidden), x.size(0), self.hidden_size)


        ### START YOUR CODE ###
    out,hidden = self.rnn_cell(x, h)
        ### END YOUR CODE ###

    ### START YOUR CODE ###
    # Hint: first call fc, then call softmax
    out = out.contiguous().view(-1, self.hidden_dim) #You need to reshape the output to fit the FC layer
    out = self.fc(out)
    return F.softmax(out)
    ### END YOUR CODE ###

    return out 
请尝试运行此程序,并在出现错误或任何疑问时通知我。无法询问您的详细信息,因为我无法发表评论


如果您对我的答案有任何想法,请提供支持。

请在答案中添加更多内容,解释OP为什么应该使用您的代码以及如何解决他们的问题。现在,你所做的改变并不明显。此外,您提出的解决方案似乎与Dev Taylor给出的答案基本相同。请在答案中添加更多内容,解释OP为什么应该使用您的代码以及它如何解决他们的问题。现在,你所做的改变并不明显。
class RNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(RNN, self).__init__()
        self.hidden_size = hidden_size

        self.rnn_cell = nn.RNNCell(input_size, hidden_size)
        self.fc = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):
        """
        x: size [seq_length, 1, input_size]
        """
        h = torch.zeros(x.size(1), self.hidden_size)

        for i in range(x.size(0)):
            ### START YOUR CODE ###
            h = self.rnn_cell(x[i,:,:], h)
            ### END YOUR CODE ###

        ### START YOUR CODE ###
        # Hint: first call fc, then call softmax
        out = self.fc(h)
        out = self.softmax(out)
        ### END YOUR CODE ###

        return out
class RNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(RNN, self).__init__()
        self.hidden_size = hidden_size

        self.rnn_cell = nn.RNNCell(input_size, hidden_size)
        self.fc = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):
        """
        x: size [seq_length, 1, input_size]
        """
        h = torch.zeros(x.size(1), self.hidden_size)

        for i in range(x.size(0)):
            ### START YOUR CODE ###
            h = self.rnn_cell(x[i,:,:], h)
            ### END YOUR CODE ###

        ### START YOUR CODE ###
        # Hint: first call fc, then call softmax
        out = self.softmax(self.fc(h))
        ### END YOUR CODE ###

        return out