不在 training loop 中积累历史记录。 默认情况下,只保留涉及梯度的变量的计算。
比如在在跟踪统计数据时,计算中的变量将超出的 training loop
考虑以下情况
total_loss = 0
for i in range(10000):
optimizer.zero_grad()
output = model(input)
loss = criterion(output)
loss.backward()
optimizer.step()
total_loss += loss
此处,total_loss 正在整个训练循环中累积历史记录,因为 loss 是一个具有 autograd 历史记录的可微变量。
可以通过以下方式修复此问题,改为
total_loss += float(loss)