train_loss += imgs.size(0)*criterion(logits, labels).data
Я предполагаю, что train_loss
- это то, что вы используете для обратного распространения (ie ваш код вызывает train_loss.backward()
. При сохранении значений в списке (для построения графика позже) используйте функцию .item()
. ie
train_loss_history.append(train_loss.item())
Скорее всего, вы сохраняете ссылку на потерю (и в конечном итоге у вас закончится память). Вызов .item
дает вам скалярное значение из тензора loss
и не переносит тензор.
Помимо вашего непосредственного вопроса, вам не следует использовать атрибут .data
. Вы используете очень старую версию PyTorch? (может быть 0.3 или ниже)? Если да, вы следует подумать об обновлении.
Вы можете найти дополнительную информацию о .item()
, .data
и обновлении PyTorch здесь . Это старый блог, который, кажется, применим к вашему случаю.