前面文章中,为了更好的理解神经网络模型,使用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://www.chenhuax.com/read/308