I am trying to use pytorch in a case for nlp binary classification and i need help to finish the neural network training and validate. I am newbie and this is my first time using pytorch, see the code below and the error...
X_train_tensor = torch.from_numpy(np.asarray(X_train)).type(torch.FloatTensor).to(device)y_train_tensor = torch.from_numpy(np.asarray(y_train)).type(torch.FloatTensor).unsqueeze(1).to(device)X_valid_tensor = torch.from_numpy(np.asarray(X_valid)).type(torch.FloatTensor).to(device)y_valid_tensor = torch.from_numpy(np.asarray(y_valid)).type(torch.FloatTensor).unsqueeze(1).to(device)X_train_tensor.size()
out: torch.Size([5438, 768])
y_train_tensor.size()
out: torch.Size([5438, 1])
criterion = nn.BCELoss()optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=5e-4)def binary_acc(preds, y_valid): y_valid_tag = torch.round(preds) correct_results = (y_valid_tag == y_valid).float() acc = correct_results.sum() / len(correct_results) return accdef train(model, *var): epoch_loss = 0 epoch_acc = 0 model.train() for x in range(X_train_tensor): optimizer.zero_grad() predictions = model(X_train_tensor) loss = criterion(predictions, y_train_tensor) acc = binary_acc(predictions, y_valid_tensor) loss.backward() optimizer.step() epoch_loss += loss.item() epoch_acc += acc.item() return epoch_loss / len(X_train_tensor), epoch_acc / len(X_train_tensor)def evaluate(model, *var): epoch_acc = 0 model.eval() with torch.no_grad(): for X in range(X_valid_tensor): predictions = model(X_train_tensor) acc = binary_acc(predictions, y_valid_tensor) epoch_acc += acc.item() return epoch_acc / len(X_valid_tensor)loss=[]acc=[]val_acc=[]for epoch in range(10): train_loss, train_acc = train(model, X_train_tensor, y_train_tensor, y_valid_tensor) valid_acc = evaluate(model, X_valid_tensor, y_valid_tensor) print(f'\tTrain Loss: {train_loss:.3f} | Train Acc: {train_acc*100:.2f}%') print(f'\t Val. Acc: {valid_acc*100:.2f}%') loss.append(train_loss) acc.append(train_acc) val_acc.append(valid_acc)
THE OUTPUT ERROR: TypeError: only integer tensors of a single element can be converted to an index
Please help me to fix this
TypeError Traceback (most recent call last)<ipython-input-46-bfd7a45f13aa> in <module> 5 for epoch in range(10): 6 ----> 7 train_loss, train_acc = train(model, X_train_tensor, y_train_tensor, y_valid_tensor) 8 valid_acc = evaluate(model, X_valid_tensor, y_valid_tensor) 9 <ipython-input-44-689c66e0e9ed> in train(model, *var) 6 model.train() 7 ----> 8 for x in range(X_train_tensor): 9 10 optimizer.zero_grad()TypeError: only integer tensors of a single element can be converted to an index