上一篇笔记中搭建了一个简单的神经网络模型,前向学习和反向传播都是使用简单的计算,但是随着模型网络的复杂,反向梯度会变得不容易直接计算,因此引入pytorch中的自动梯度降低代码复杂度
1. autograd和variable
torch.autograd包主要功能是完成网络反向传播时的链式求导
过程大致为:先通过输入的tensor数据类型的变量在神经网络的前向传播中生成一张计算图,然后再根据这个计算图和输出结果准确计算出各个参数需要更新的梯度,并通过完成反向传播对参数进行梯度更新。
在实践中使用autograd包中的variable类进行封装,封装之后计算图中每一个节点就是一个variable对象
因此如果用X代表选中的节点,那么X.data 就是tensor数据对象,X.grad就是X的梯度对象,X.grad.data就是X的梯度数据值啦
同样地我们搭建一个简易二层神经网络使用自动梯度方法和上一篇进行对比
import torch
from torch.autograd import Variable
batch_n=100
input_data=1000
hidden_layer=100
output_data=10
x=Variable(torch.randn(batch_n,input_data),requires_grad=False)
y=Variable(torch.randn(hidden_layer,output_data),requires_grad=False)
w1=Variable(torch.randn(input_data,hidden_layer),requires_grad=True)
w2=Variable(torch.randn(hidden_layer,output_data),requires_grad=