- 在下面的代码中,在每次l.backward()前都要trainer.zero_grad(),否则梯度会累加。
num_epochs = 3
for epoch in range(num_epochs):for X, y in data_iter:l = loss(net(X), y)trainer.zero_grad()l.backward()trainer.step()l = loss(net(features), labels)print(f'epoch {epoch + 1}, loss {l:f}')
- trainer.step()在参数迭代的时候是如何知道batch_size的?
因为loss = nn.MSELoss(),均方误差是对样本总量平均过得到的,所以trainer.step()使用的是平均过的grad。
参考资料:
- https://zh-v2.d2l.ai/chapter_linear-networks/linear-regression-concise.html