《PyTorch深度学习实践》第三讲 反向传播

《PyTorch深度学习实践》第三讲 反向传播

  • 问题描述
  • 问题分析
  • 编程实现
    • 代码
    • 实现效果
  • 参考文献

问题描述

《PyTorch深度学习实践》第三讲 反向传播_第1张图片
《PyTorch深度学习实践》第三讲 反向传播_第2张图片

问题分析

《PyTorch深度学习实践》第三讲 反向传播_第3张图片
《PyTorch深度学习实践》第三讲 反向传播_第4张图片
《PyTorch深度学习实践》第三讲 反向传播_第5张图片
《PyTorch深度学习实践》第三讲 反向传播_第6张图片
《PyTorch深度学习实践》第三讲 反向传播_第7张图片
《PyTorch深度学习实践》第三讲 反向传播_第8张图片
《PyTorch深度学习实践》第三讲 反向传播_第9张图片
《PyTorch深度学习实践》第三讲 反向传播_第10张图片
《PyTorch深度学习实践》第三讲 反向传播_第11张图片
《PyTorch深度学习实践》第三讲 反向传播_第12张图片
《PyTorch深度学习实践》第三讲 反向传播_第13张图片
《PyTorch深度学习实践》第三讲 反向传播_第14张图片
《PyTorch深度学习实践》第三讲 反向传播_第15张图片

编程实现

代码

《PyTorch深度学习实践》第三讲 反向传播_第16张图片

《PyTorch深度学习实践》第三讲 反向传播_第17张图片
《PyTorch深度学习实践》第三讲 反向传播_第18张图片
《PyTorch深度学习实践》第三讲 反向传播_第19张图片
《PyTorch深度学习实践》第三讲 反向传播_第20张图片
《PyTorch深度学习实践》第三讲 反向传播_第21张图片
《PyTorch深度学习实践》第三讲 反向传播_第22张图片

import torch
# 数据集
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# w权重
w = torch.tensor([1.0])
w.requires_grad = True  # 需要计算梯度

# 前馈计算
def forward(x):
    return x * w  # w 是tensor

# 计算损失
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

print("predict (before training)", 4, forward(4).item())
# 训练
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.grad.data   # 获得梯度 取张量data,注意grad也是一个tensor

        w.grad.data.zero_()  # 将每轮求得的梯度清零

    print("progress:", epoch, l.item()) # 取出loss使用l.item,不要直接使用l(l是tensor会构建计算图)

print("predict (after training)", 4, forward(4).item())

实现效果

《PyTorch深度学习实践》第三讲 反向传播_第23张图片

参考文献

传送门反向传播

你可能感兴趣的:(PyTorch深度学习实践,深度学习,pytorch,人工智能)