Pytorch从入门到放弃(三)

numpy 梯度下降

x=1
lr = 0.01 # 学习率
epochs = 100 # 迭代次数
y = lambda x:x**2+2*x+1   # 抛物线函数

for epochs in range(epochs):
  dx = 2*x + 2   # 求导
x = x-lr *dx # 梯度下降
print(x)

pytorch 梯度下降

  • torch.Tensor是这个包的核心类。如果设置它的属性 .requires_grad为True,那么它将会追踪对于该张量的所有操作。当完成计算后可以通过调用.backward(),来自动计算所有的梯度。这个张量的所有梯度将会自动累加到.grad属性.
import torch
from torch.autograd import Variable # 这里的Variable是torch里的一个自动求导函数
x = torch.Tensor([1])  # 定义一个torch.float 张量,相当于numpy的array,其中[1]只是列表,torch.Tensor 就是创建一个张量,也就是和numpy中的矩阵一样,numpy.array有的运算torch.Tensor都有
x = Variable(x,requires_grad=True) # 定义一个自动求导函数,建立一个计算图的起点。
print(
  '\ngrad:',x.grad,  # 梯度的综合
  '\ndata:',x.data
) # grad 和 data 是Variable的两个属性,x.data就是前面x包含的tensor
# Pytorch 本质,建立一个计算图,自动求导
lr = 0.01
epochs = 100

for epochs in range(epochs):
  y = x ** 2 + 2 * x + 1
  y.backward(x) # 这里是反向传导,反向传导后就有grad
  print('grad:',x.grad.data)
  x.data = x.data - lr * x.grad.data
  x.grad.data.zero_() # 梯度清零
print(x.data)

你可能感兴趣的:(Pytorch从入门到放弃(三))