在使用Pytorch训练神经网络模型时,放置backward方法的位置是否有差别?例如下面哪一个是正确的?
跨批次计算梯度:
跨批次计算梯度:
for e in range(epochs):
for i in batches_list:
out = nn_model(i)
loss = loss_function(out, actual)
loss_sum += loss.item()
lstm.zero_grad()
loss.backward()
optimizer.step()
loss_list.append(loss_sum / num_train_obs)
在整个 epoch(一个训练周期)中计算梯度:
for e in range(epochs):
for i in batches_list:
out = nn_model(i)
loss = loss_function(out, actual)
loss_sum += loss.item()
lstm.zero_grad()
loss_sum.backward()
optimizer.step()
loss_list.append(loss_sum / num_train_obs)