如何解决关于pytorch,我不明白为什么会这样
关于pytorch的代码如下,它是关于派生的,我认为输出是18,但它是4.5,我不知道为什么:
I think the derivative is 2*3*(1+2),so it should be:
tensor([[18,18],[18,18]])
输出: 张量([[4.5000,4.5000], [4.5000,4.5000]]
$first = 2;
$second = 4;
$answer.='<p>The answer is '.$first - $second.'</p> ';
echo $answer;
为什么输出为4.5? 有人认为使导数为/ 4的方法是平均值,但是当我执行代码“ print(out)”时,输出为“ tensor(27。,grad_fn =)”,而不是(4.5。,grad_fn =),我是pytorch的新手,所以我不知道它对“ tensor.mean()”的作用,但是由于“ print(out)”的输出为27,所以我认为没有“ tensor.mean()”中的“ / 4”过程,所以我不认为它应该在导数计算中包括“ / 4”过程,对吗?(请帮帮我〜)
解决方法
这是我的看法:
y = x + 2
和z = y * y * 3
,
所以z是3 * (x+2)^2
接下来,out = z.mean()
或sigma z / n
是sigma z/4
,因为我们在z中共有4个数字。
因此,您发现x = 1时西格玛(3 * (x + 2)^2)/4
的导数。
这样(3/4) * 2(x + 2)
的x = 1,即4.5
因此,我认为您已经了解了所有内容,只是在最后一步中您错过了除以4的操作,因为其中有一个mean()函数,所以您需要这样做。
编辑:
由于您对mean()如何影响输出感到困惑,因此让我们使用值[1,2,3,4]而不是torch.ones()
的张量来查看效果。
x = torch.tensor([1.0,2.0,3.0,4.0],requires_grad=True)
y = x + 2
z = y * y * 3
out = z.mean()
out.backward()
print(x.grad)
这将输出
tensor([4.5000,6.0000,7.5000,9.0000])
如何?请记住,我们导出的方程式为:
(3/4) * 2(x + 2)
现在将x替换为1,得到4.500。
然后,对于x = 2,您将获得6.000,对于x = 3,您将获得7.500,依此类推。
在前面的示例中,您有四个x = 1的实例,这就是为什么您将x.grad设为[[4.5,4.5],[4.5,4.5]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。