Pytorch深度学习实践 第四讲 反向传播

确定输入和隐层矩阵→得到权重w矩阵。

Pytorch深度学习实践 第四讲 反向传播_第1张图片

Forward and Backward:

Pytorch深度学习实践 第四讲 反向传播_第2张图片

 线性模型的计算图,正向和反向过程:

Pytorch深度学习实践 第四讲 反向传播_第3张图片

 关于Tensor:存数据,包含标量、向量、矩阵等。

Pytorch深度学习实践 第四讲 反向传播_第4张图片

 示例代码:(代码是在构建计算图,要有这种思维。)

import torch

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
#tensor中包含data(w)和grad(loss对w求导)
w = torch.Tensor([1.0]) #w=1.0
w.requires_grad = True #设置只有在需要时才计算梯度

def forward(x):
    return x * w #x和w都是tensor类型,数乘
def loss(x, y):
    '每调用一次loss函数,就把计算图构建出来了'
    y_pred = forward(x)
    return (y_pred - y) ** 2

print('predict (before training)', 4.0, forward(4.0).item())
for epoch in range(100):
    for x,y in zip(x_data,y_data):
        l = loss(x,y) #l是tensor,
        l.backward() #反向传播过程就会自动计算所需要的梯度
        print('\tgrad:', x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.data #取到值.data,不然就是tensor计算
        w.grad.data.zero_() #把梯度清0,不然就变成了梯度累加

    print('progress:', epoch, l.item())
print('predict(after training', 4, forward(4).item()) #.item表示取标量值

 注:l.backward() 调用这个成员函数来进行反馈,会自动求出计算图上所需要的梯度,只要一做backward,计算图就被释放了

w.grad.data,是取到数值,w.grad是Tensor,即\frac{\partial loss}{\partial w}.

w.grad.item() 是取标量值。

线性模型是\hat{y}=w_{1}*x^{^{2}} + w_{2}*x + b时的计算图构建:

Pytorch深度学习实践 第四讲 反向传播_第5张图片

 

 

 

 

 

 

 

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