[深度学习入门].detach().numpy()含义

计算图(Computation Graph)是现代深度学习框架如PyTorch和TensorFlow等的核心,其为高效自动求导算法——反向传播(Back Propogation)提供了理论支持。

一、自动求导(Autograd)

Autograd 是反向传播(Back propagation)中运用的自动微分系统。 从概念上来说,autograd 会记录一张有向无环图(Directed acyclic graph),这张图在所有创建新数据的操作被执行时记录下这些操作。图的叶子(leaves)是输入张量,根(root)是输出张量。 通过从根到叶追踪这张图,可以使用链式法则自动计算梯度。

在内部,这张有向无环图的结点都是Function对象(实际上是表达式),可以通过apply()来计算对图求值的结果。在正向传播中,Autograd 在计算正向传播结果的同时,构建了这张由Function组成的有向无环图来以便进行反向传播(torch.Tensor.grad_fn属性就是这张图的入口点)。在正向传播计算完成以后,我们就可以追踪这张图来执行反向传播,计算出梯度。

需要注意是,Autograd在每一次迭代中都会从头创建这章计算图,这也正是可以对任意Python控制流进行梯度计算的原因。图的整体形状和大小在每次迭代中都可以被更改。此外,在训练之前不要对所有可能的路径进行编码,每次迭代中实际运行的部分就是纳入梯度计算的部分。

二、.detach().numpy()

在PyTorch中,当使用autograd跟踪张量的操作历史时,有时需要从计算图中分离张量以进行进一步的计算。在这种情况下,可以使用detach()方法来创建一个新的张量,返回一个新的tensor,新的tensor和原tensor共享数据内存(修改一个tensor的值,另外一个也会改变),但不再与计算图相关联,不涉及梯度计算。

在从tensor转换成为numpy的时候,如果转换前面的tensor在计算图里面(requires_grad = True),那么这个时候只能先进行detach操作才能转换成为numpy。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值