在使用Pytorch训练nn模型时,关于放置向后方法的位置是否有所不同?例如,以下哪一项是正确的?
计算批次中的梯度:
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)
计算历时的梯度:
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)
答案 0 :(得分:1)
两者在编程上都是正确的。
第一个是批梯度下降,第二个是梯度下降。在大多数问题中,我们都想进行批量梯度下降,因此第一个是正确的方法。它也可能训练得更快。
如果要进行梯度下降,则可以使用第二种方法(但是,当可以批处理GD时,很少需要进行GD)。但是,由于在GD中您不会清除每个批次的图形(.zero_grad
仅被调用一次),因此可能会耗尽内存。