Please see the below code and guide me as I am new to deep learning and PyTorch.
The code runs fine if I use all the dataset at a time but throws an error while using batches of 32.
class LSTMTagger(nn.Module):
def __init__(self, embedding_dim, hidden_dim, vocab_size, tagset_size):
super(LSTMTagger, self).__init__()
self.hidden_dim = hidden_dim
self.word_embeddings = nn.Embedding(vocab_size, embedding_dim)
# The LSTM takes word embeddings as inputs, and outputs hidden states
# with dimensionality hidden_dim.
self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first = True)
# The linear layer that maps from hidden state space to tag space
self.hidden2tag = nn.Linear(hidden_dim, tagset_size)
def forward(self, sentence):
embeds = self.word_embeddings(sentence)
lstm_out, _ = self.lstm(embeds.view(len(sentence), 1, -1))
tag_space = self.hidden2tag(lstm_out.view(len(sentence), -1))
tag_scores = F.log_softmax(tag_space, dim=1)
return tag_scores
EMBEDDING_DIM = 32
HIDDEN_DIM = 32
EPOCHS = 10
model = LSTMTagger(EMBEDDING_DIM, HIDDEN_DIM, len(word_to_ix), len(tag_to_ix))
loss_function = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
for epoch in range(EPOCHS):
for sentence, tags in train_loader:
model.zero_grad()
tag_scores = model(sentence)
loss = loss_function(tag_scores, tags)
loss.backward()
optimizer.step()
Error:
RuntimeError Traceback (most recent call last)
in
18 model.zero_grad()
19
—> 20 tag_scores = model(sentence)
21
22 loss = loss_function(tag_scores, tags)
~\anaconda3\envs\tensorflow_gpu\lib\site-packages\torch\nn\modules\module.py in call(self, *input, **kwargs)
548 result = self._slow_forward(*input, **kwargs)
549 else:
–> 550 result = self.forward(*input, **kwargs)
551 for hook in self._forward_hooks.values():
552 hook_result = hook(self, input, result)
in forward(self, sentence)
16 def forward(self, sentence):
17 embeds = self.word_embeddings(sentence)
—> 18 lstm_out, _ = self.lstm(embeds.view(len(sentence), 1, -1))
19 tag_space = self.hidden2tag(lstm_out.view(len(sentence), -1))
20 tag_scores = F.log_softmax(tag_space, dim=1)
~\anaconda3\envs\tensorflow_gpu\lib\site-packages\torch\nn\modules\module.py in call(self, *input, **kwargs)
548 result = self._slow_forward(*input, **kwargs)
549 else:
–> 550 result = self.forward(*input, **kwargs)
551 for hook in self._forward_hooks.values():
552 hook_result = hook(self, input, result)
~\anaconda3\envs\tensorflow_gpu\lib\site-packages\torch\nn\modules\rnn.py in forward(self, input, hx)
565 hx = self.permute_hidden(hx, sorted_indices)
566
–> 567 self.check_forward_args(input, hx, batch_sizes)
568 if batch_sizes is None:
569 result = _VF.lstm(input, hx, self._flat_weights, self.bias, self.num_layers,
~\anaconda3\envs\tensorflow_gpu\lib\site-packages\torch\nn\modules\rnn.py in check_forward_args(self, input, hidden, batch_sizes)
517 def check_forward_args(self, input, hidden, batch_sizes):
518 # type: (Tensor, Tuple[Tensor, Tensor], Optional[Tensor]) -> None
–> 519 self.check_input(input, batch_sizes)
520 expected_hidden_size = self.get_expected_hidden_size(input, batch_sizes)
521
~\anaconda3\envs\tensorflow_gpu\lib\site-packages\torch\nn\modules\rnn.py in check_input(self, input, batch_sizes)
168 raise RuntimeError(
169 ‘input.size(-1) must be equal to input_size. Expected {}, got {}’.format(
–> 170 self.input_size, input.size(-1)))
171
172 def get_expected_hidden_size(self, input, batch_sizes):
RuntimeError: input.size(-1) must be equal to input_size. Expected 32, got 9952