PyTorch学习03-通过示例学习PyTorch之NumPy&&Tensor

提示1:原文链接
提示2:反向传播


前言

  提示:本篇博客主要是记录pytorch的学习过程,当作是一个笔记来使用。
  本篇内容如下:

  • NumPy
  • 张量

  本文任务:使用NumPy和Tensor完成三阶多项式拟合y = sin(x)的问题。该网络将具有四个参数,并且将通过使网络输出与实际输出之间的欧几里德距离最小化来进行梯度下降训练,以适应随机数据。


一、NumPy

1.1 知识点记录

  1. 要点:在本实现中,我们使用 numpy 手动实现前向传播,损失(loss)和反向传播。
  2. 注意:numpy 数组是一种通用的 n 维数组;它跟深度学习,梯度或计算图没啥关系,只是执行通用数值计算的一种方法。
  3.步骤:
    ① 创建随机的输入数据和输出数据
    ② 随机初始化权重
    ③ 前向传播:计算预测y值
    ④ 计算和打印loss
    ⑤ 反向传播计算 a、b、c、d 相对于损失的梯度
    ⑥ 更新权重

1.2 核心代码

  提示:全部代码点这里

for t in range(2000):
    # Forward pass: compute predicted y
    # y = a + b x + c x^2 + d x^3
    y_pred = a + b*x + c*x**2 + d*x**3
    # Compute and print loss
    loss = np.square(y_pred - y).sum()
    if t % 100 == 99:
        print(t, loss)
    # Backprop to compute gradients of a, b, c, d with respect to loss
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x**2).sum()
    grad_d = (grad_y_pred * x**3).sum()
    # Update weights
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d   
print(f'Result: y = {a} + {b} x + {c} x^2 + {d} x^3')   

二、张量

2.1 知识点记录

  本小节主要是使用tensor来实现第一节中的任务,值得注意的是:
    1. PyTorch 的张量基本上与 numpy 数组一样:它跟深度学习,梯度或计算图也没啥关系,只是用于任意数值计算的一种通用 n 维数组。
    2. numpy 数组和 PyTorch 张量之间的最大区别在于,PyTorch 张量可以在 CPU 或 GPU 上运行。如果要在 GPU 上运行,只需将张量转换为 cuda 数据类型。

2.2 核心代码

  提示:全部代码点这里

for t in range(2000):
    # Forward pass: compute predicted y
    y_pred = a + b * x + c * x ** 2 + d * x ** 3
    # Compute and print loss
    loss = (y_pred - y).pow(2).sum().item()
    if t % 100 == 99:
        print(t, loss)
    # Backprop to compute gradients of a, b, c, d with respect to loss
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x ** 2).sum()
    grad_d = (grad_y_pred * x ** 3).sum()
    # Update weights using gradient descent
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d
print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')

总结

  本章难点在于反向传播的实现部分,可以返回 PyTorch学习02 进行回顾。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想拯救世界_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值