#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
того, о чем вы написали в комментарии.