J'essaie de créer une méthode Pass en avant RNN pouvant prendre une taille variable d'entrée, masquée et de sortie et de créer les cellules RNN nécessaires. Pour moi, il semble que je passe les variables correctes à self.rnn_cell - les valeurs d'entrée de x et la couche cachée précédente. Cependant, l'erreur que je reçois est incluse ci-dessous.
J'ai aussi essayé d'utiliser X [i] et x [:, I, I] (comme suggéré par mon professeur) en vain. Je suis confus et je cherche juste des conseils quant à savoir si je fais ou non la bonne chose ici. Mon prof a suggéré que, puisque je continue à recevoir des erreurs, je devrais redémarrer le noyau dans Jupyter Notebook et Code Rerun. J'ai, et je reçois les mêmes erreurs ... p>
S'il vous plaît laissez-moi savoir si vous avez besoin de contexte supplémentaire. p>
3 Réponses :
Je ne suis pas un expert à des RNNS, mais je leur donne un essai.
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
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
Veuillez ajouter plus à la réponse qui explique pourquoi l'OP devrait utiliser votre code et comment il résout son problème. Comme c'est maintenant ce n'est pas vraiment évident, quels changements avez-vous faits.
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
Veuillez ajouter plus à la réponse qui explique pourquoi l'OP devrait utiliser votre code et comment il résout son problème. Comme c'est maintenant ce n'est pas vraiment évident, quels changements avez-vous faits. De plus, il semble que votre solution proposée soit fondamentalement identique à la réponse faite par Dev Taylor.