Pytorch 深度学习实践Lecture_4 Back Propagation

 up主 刘二大人

视频链接 刘二大人的个人空间_哔哩哔哩_Bilibili
 

反向传播

可以通过链式法则,使得梯度在计算图中进行反向传播

在Pytorch中, Tensor 对象包含data 和 grad 两个属性 

   data: 用于存放tensor,是数据本体。

   grad: 存放data的梯度值(默认不计算梯度)

在Pytorch中, Tensor之间的计算即为动态生成计算图(谨记)

import torch
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

def forward(x):
    return x*w

def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) **2

w = torch.Tensor([1.0])
w.requires_grad = True

print('predict (before training)', 4, forward(4).item())
epoch_list = []
loss_list = []
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        l.backward()
        print('\tgrad:', x, y, w.grad.item())
        w.data = w.data - 0.01 * w * w.grad.data
        epoch_list.append(epoch)
        loss_list.append(l.item())
        w.grad.data.zero_()
    print("progress:", epoch, "w=", w.item(), "loss=", l.item())
print('Predict (after training)', 4, forward(4).item())
plt.plot(epoch_list, loss_list)
plt.xlabel('epoch')
plt.ylabel('Loss')
plt.show()

结果显示

Pytorch 深度学习实践Lecture_4 Back Propagation_第1张图片

你可能感兴趣的:(Pytorch深度学习实践,pytorch)