'Target size (torch.Size([16])) must be the same as input size (torch.Size([16, 5]))
I am doing a text classification using pytorch and BERTSequenceClassification. The model will classify the text into 5 classes but I got this error while doing the training.
ValueError: Target size (torch.Size([16])) must be the same as input size (torch.Size([16, 5]))
num_epochs = 5
eval_every = len(train_loader) // 2
file_path = destination_folder
best_valid_loss = float("Inf")
# initialize running values
running_loss = 0.0
valid_running_loss = 0.0
global_step = 0
train_loss_list = []
valid_loss_list = []
global_steps_list = []
# training loop
model.train()
for epoch in range(num_epochs):
for (labels, OriginalTweet), _ in train_loader:
labels = labels.type(torch.LongTensor)
labels = labels.to(device)
OriginalTweet = OriginalTweet.type(torch.LongTensor)
OriginalTweet = OriginalTweet.to(device)
output = model(OriginalTweet, labels)
loss, _ = output
optimizer.zero_grad()
loss.backward()
optimizer.step()
# update running values
running_loss += loss.item()
global_step += 1
# evaluation step
if global_step % eval_every == 0:
model.eval()
with torch.no_grad():
# validation loop
for (labels,OriginalTweet), _ in valid_loader:
labels = labels.type(torch.LongTensor)
labels = labels.to(device)
OriginalTweet = OriginalTweet.type(torch.LongTensor)
OriginalTweet = OriginalTweet.to(device)
output = model(OriginalTweet, labels)
loss, _ = output
valid_running_loss += loss.item()
# evaluation
average_train_loss = running_loss / eval_every
average_valid_loss = valid_running_loss / len(valid_loader)
train_loss_list.append(average_train_loss)
valid_loss_list.append(average_valid_loss)
global_steps_list.append(global_step)
# resetting running values
running_loss = 0.0
valid_running_loss = 0.0
model.train()
# print progress
print('Epoch [{}/{}], Step [{}/{}], Train Loss: {:.4f}, Valid Loss: {:.4f}'
.format(epoch+1, num_epochs, global_step, num_epochs*len(train_loader),
average_train_loss, average_valid_loss))
# checkpoint
if best_valid_loss > average_valid_loss:
best_valid_loss = average_valid_loss
save_checkpoint(file_path + '/' + 'model.pt', model, best_valid_loss)
save_metrics(file_path + '/' + 'metrics.pt', train_loss_list, valid_loss_list, global_steps_list)
save_metrics(file_path + '/' + 'metrics.pt', train_loss_list, valid_loss_list, global_steps_list)
→ output = model(OriginalTweet, labels) above is the line that causes this error
I am very new to this field. Any help and advice is very appreciated. Thanks in advance!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
