PyTorch 动态计算图构建的理解

与TensorFlow等框架使用的“静态计算图”不同。在PyTorch中,计算图是在运行时动态构建的,这意味着在每次前向传播时,都会根据当前的操作创建一个新的计算图。

下面举一个简单的例子来帮助理解:

import torch  
  
# 创建一个张量并设置requires_grad=True来跟踪其计算历史  
x = torch.ones(2, 2, requires_grad=True)  
print(x)  
'''tensor([[1., 1.],
        [1., 1.]], requires_grad=True)'''

# 对张量进行操作  
y = x + 2  
print(y)  
'''tensor([[3., 3.],
        [3., 3.]], grad_fn=<AddBackward0>)'''
  
# y是操作的结果,所以它有grad_fn属性  
print(y.grad_fn) 
'''<AddBackward0 object at 0x0000017595769720>''' 
   
z = y * y * 3  
out = z.mean()  
  
print(z, out)
'''tensor([[27., 27.],
        [27., 27.]], grad_fn=<MulBackward0>) 
   tensor(27., grad_fn=<MeanBackward0>)'''

在这个例子中,我们首先创建了一个形状为(2, 2)的张量x,并设置requires_grad=True以便跟踪其计算历史。然后我们对x进行了一系列的操作,最后计算了结果的均值。

在这个过程中,PyTorch会自动地为我们构建一个计算图。这个计算图记录了从输入x到输出out的所有操作。当对out进行反向传播时,PyTorch会利用这个计算图来计算梯度。

例如,如果我们想计算输出out关于输入x的梯度,可以这样做:

out.backward()  
print(x.grad)
'''tensor([[4.5000, 4.5000],
        [4.5000, 4.5000]])'''

 

这段代码会计算out关于x的梯度,并将结果存储在x.grad中。注意,只有requires_grad=True的张量才会有.grad属性。在这个例子中,x.grad属性现在包含了out关于x的梯度。

总的来说,PyTorch的计算图是动态构建的,它会在你执行操作时自动记录计算历史。这使得PyTorch的代码更加直观和易于调试,因为你不需要事先定义计算图的结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值