PyTorch深度学习

线性模型

  • backward理解
  • 喂数据batch

backward理解

在随机梯度下降算法中,可以看到Loss的计算公式是有wx-y得到的,在梯度下降的计算过程中,我们需要求loss关于w的倒数,从而判断梯度湘江过程中的方向。在整个模型中求这个倒数,我们要利用到高数中的链式求导法则
PyTorch深度学习_第1张图片

import torch
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,5.0]

# 初始化权重w
w1 = torch.tensor([1.0])
w2 = torch.tensor([1.0])
b = torch.tensor([1.0])
# 权重需要更新
w1.requires_grad = True
w2.requires_grad = True
b.requires_grad = True

# 定义前馈计算
def forward(x):
    return w1*x**2+w2*x+b

# 定义损失函数
def loss(x,y):
    y_pred = forward(x)
    return (y_pred-y)**2

epochs = []
costs = []
# 学习率定义成0.01
for epoch in range(100):
    for x, y in zip(x_data,y_data):
        l = loss(x, y)
        l.backward()
        w1.data -= 0.01*w1.grad.item()
        w2.data -= 0.01*w2.grad.item()
        b.data -= 0.01*w2.grad.item()
        print(w1.grad,w2.grad,b.grad)
        #       梯度清零
        w1.grad.data.zero_()
        w2.grad.data.zero_()
        b.grad.data.zero_()
    costs.append(l.item())
    print('progress:', epoch, l.item())

喂数据batch

在深度学习中,多组数据同时喂进模型中去,利用的是矩阵。梯度下降和随机梯度下降的区别就在于在进行计算梯度的时候,前者是将所有数据打包成矩阵进行计算的,计算量更小,但是会更容易达到一个鞍点,随机梯度下降则是将每一个将本数据一次进行计算,计算量更大,但是整个模型计算出的结果会更准确,通过两者相结合的办法,采用小批量的喂数据的方法可以提高速度的同时,达到一个好的性能。

你可能感兴趣的:(pytorch,机器学习)