对pytorch中动态建图的一点小见解

本文通过实例探讨PyTorch中的动态建图原理,解释了即使在涉及不可求导元素的计算过程中,仍能进行反向自动求导的原因。通过代码展示,证明了PyTorch如何跟踪计算过程,以及如何利用grad_fn进行反向传播求梯度。
摘要由CSDN通过智能技术生成

什么是动态建图?如何动态建图?动态建图为什么可以反向自动求导?

我对于这个问题一直存在疑惑,但是去网上又没有找到好的解释,于是,没办法,自己实验吧。

首先,我们做如下定义:

a = torch.randn(2)

b = torch.randn(2)

c = torch.randn(2,requires_grad=True)

m = a*b

print(m.grad_fn)

q = a*c

print(q.grad_fn)

我们定义a,b为不可自动求导的,而c是可以自动求导的。按照我们的认知,m.grad_fn为None,那q呢?不可求导乘可以求导结果是什么呢?我们进行了打印,输出如下:

None <MulBackward1 object at 0x7f9dd14a4320>

咦?不可求导乘可求导结果是可以反向传播求导的,这意味着什么呢?是否有一个是可求导的值,那这个值到最终结尾这条路上所有经过的点是不是都可以反向传播求导呢?

于是我们做了一下测试:

a = torch.randn(5,5,requires_grad=True)

b = torch.randn(5,5)

c = torch.randn(5,5)

d = torch.randn(5,5)

f = torch.randn(5,5)

for i in range(5):

for j in range(5):

c[i,j] = a[i,j]*b[i,j]</

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值