前面文章中,为了更好的理解神经网络模型,使用Numpy手写了一个两层的神经网络模型,但如果网络层数增多,激活函数变得复杂的情况下,这种硬解的方式会非常麻烦。
可喜的是,Pytorch给我们提供了自动求导(Autograd)的功能,可以在计算损失后,自动反向传播求导。
代码示例
import torch N, D_in, H, D_out = 64, 1000, 100, 10 x = torch.randn(N, D_in) y = torch.randn(N, D_out) w1 = torch.randn(D_in, H, requires_grad=True) w2 = torch.randn(H, D_out, requires_grad=True) lr = 1e-6 for i in range(500): # clamp(min, max) 快速构建分段函数 y_hat = x.mm(w1).clamp(min=0).mm(w2) # 定义损失函数 loss = (y_hat - y).pow(2).sum() print(i, loss.item()) # 反向传播,自动求导 loss.backward() # print(w1.grad) # print(w2.grad) # 这一步不需要求导 with torch.no_grad(): w1 -= lr * w1.grad w2 -= lr * w2.grad # 更新权重参数后,将梯度归零 w1.grad.zero_() w2.grad.zero_()
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/308