Я пытаюсь обучить свою сеть данным iris, но получаю следующую ошибку. Хотя я также изменил тип, но он по-прежнему выдает ту же ошибку

#python #python-3.x #pytorch

#python #python-3.x #pytorch

Вопрос:

 'num_epochs = 500
train_loss = []
test_loss = []
train_accuracy = []
test_accuracy = []

for epoch in range(num_epochs):

    train_correct = 0
    train_total = 0

    for i, (items, classes) in enumerate(train_loader):
    
        items = Variable(items)
        classes = Variable(classes)
    
        net. train()           # Put the network into training mode
    
        optimizer.zero_grad() # Clear off the gradients from any past operation
        outputs = net(items)  # Do the forward pass
        loss = criterion(outputs, classes) # Calculate the loss
        loss.backward()       # Calculate the gradients with help of back propagation
        optimizer.step()      # Ask the optimizer to adjust the parameters based on the gradients
    
        train_total  = classes.size(0)    
        _, predicted = torch.max(outputs.data, 1)
        train_correct  = (predicted == classes.data).sum()

        print ('Epoch %d/%d, Iteration %d/%d, Loss: %.4f' 
           %(epoch 1, num_epochs, i 1, len(train_ds)//batch_size, loss.data[0]))

    net.eval()                 # Put the network into evaluation mode

    train_loss.append(loss.data[0])

    train_accuracy.append((100 * train_correct / train_total))

    
    test_items = torch.FloatTensor(test_ds.data.values[:, 0:4])
    test_classes = torch.LongTensor(test_ds.data.values[:, 4])

    outputs = net(Variable(test_items))
    loss = criterion(outputs, Variable(test_classes))
    test_loss.append(loss.data[0])
    _, predicted = torch.max(outputs.data, 1)
    total = test_classes.size(0)
    correct = (predicted == test_classes).sum()
    test_accuracy.append((100 * correct / total))`'
 

И я получаю ошибку

 RuntimeError                              
       Traceback (most recent call last)
        <ipython-input-21-d25f2c091906> in <module>
        21         optimizer.zero_grad() # Clear off the gradients from any past operation
        22         outputs = net(items)  # Do the forward pass
        ---> 23         loss = criterion(outputs, classes) # Calculate the loss
        24         loss.backward()       # Calculate the gradients with help of back propagation
        25         optimizer.step()      # Ask the optimizer to adjust the parameters based on the gradients

RuntimeError: expected scalar type Long but found Int
 

Ответ №1:

Кажется, именно эта строка loss = criterion(outputs, classes) генерирует ошибку.

Изменение classes = Variable(classes) classes = Variable(classes).long() на преобразование classes в тип Long имеет criterion ожидаемый метод.

Комментарии:

1. Я сделал то же самое, и он выдает ошибку: IndexError: недопустимый индекс тензора 0-dim. Используйте tensor.item() в Python или tensor.item<T>() в C для преобразования тензора 0-dim в число

2. Использование loss.data[0] устарело, и его рекомендуется использовать loss.item() . Изменение каждого, где вам loss.data[0] нужно loss.item() , должно исправить это.

3. Спасибо, сэр, но проблема с типом посмотрите на ошибку времени выполнения выше. Если у вас есть представление об этом, я был бы благодарен

4. Я уже ответил на это в своем посте. Комментарий является продолжением моего поста и касается IndexError того, о чем вы написали в комментарии.