【问题标题】:Tensor Operation and gradient张量运算和梯度
【发布时间】:2022-01-17 17:20:24
【问题描述】:

我在 youtube 上学习了一些教程,下面的代码示例用于解释衍生品

创建张量。

    x = torch.tensor(3.)

    w = torch.tensor(4., requires_grad=True)

    b = torch.tensor(5., requires_grad=True)

    x, w, b

算术运算

    y = w * x + b

    y

计算导数

    y.backward()

显示渐变

    print('dy/dx:', x.grad)

    print('dy/dw:', w.grad)

    print('dy/db:', b.grad)

输出

dy/dx:无

dy/dw:张量(3.)

dy/db:张量(1.)

谁能解释一下我们如何将张量(3.)和张量(1.)作为梯度的输出。我需要了解 pytorch 如何在幕后执行此操作。

任何帮助将不胜感激。

【问题讨论】:

  • 这不是 PyTorch 特有的,它只是常规的区分。我建议您尝试手动区分y

标签: deep-learning pytorch gradient tensor derivative


【解决方案1】:

你有y = w*x + b,那么

dy/dx = w
dy/dw = x
dy/db = 1

由于您没有为 x 设置 requires_grad=True,PyTorch 不会计算 w.r.t 的导数。它。
因此,dy/dx = None

Rest 是对应张量的值。因此,最终输出为

dy/dx: None
dy/dw: tensor(3.)
dy/db: tensor(1.)

【讨论】:

  • 谢谢 Harshit - 我理解 dy/dx = w, dy/dw = x,但是我无法理解我们是如何得到 dy/db = 1 的?你能帮忙吗?
  • 如果你区分 y w.r.t. b,你会得到 1。check
  • @ZKS 区分 d(w*x+b)/db = d(w*x)/db + db/db = 0 + 1 = 1
  • 感谢 Harshit 的帮助。欣赏它。
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 2023-03-27
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多