ShusenTang / Dive-into-DL-PyTorch

本项目将《动手学深度学习》(Dive into Deep Learning)原书中的MXNet实现改为PyTorch实现。
http://tangshusen.me/Dive-into-DL-PyTorch
Apache License 2.0
18.17k stars 5.38k forks source link

6.5 循环神经网络的简洁实现中调用梯度裁剪grad_clipping问题 #101

Open alqbib opened 4 years ago

alqbib commented 4 years ago

6.5 循环神经网络的简洁实现中调用梯度裁剪方法: d2l.grad_clipping(model.parameters(), clipping_theta, device) 传入的model.parameters()是迭代器,在grad_clipping方法里的第一次for循环迭代中已迭代完,在第二次for循环迭代中不会重新迭代. def grad_clipping(params, theta, device): norm = torch.tensor([0.0], device=device) for param in params: ### # 第一次循环迭代, 将params迭代完 norm += (param.grad.data * 2).sum() norm = norm.sqrt().item() if norm > theta: for param in params: # params已迭代完,不会重新开始,无法再进入后面的赋值 param.grad.data = (theta / norm)

应改为d2l.grad_clipping(list(model.parameters()), clipping_theta, device)