Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 14126

Pytorch TypeError: only integer tensors of a single element can be converted to an index

$
0
0

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

Viewing all articles
Browse latest Browse all 14126

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>