detach()什么作用??是类似于copy()的作用吗?
收藏
不太明白 detah()的作用,希望有朋友可以讲解一下。
作用是类似于list.copy()吗?
附上例子如下:
import paddle import numpy as np data = np.random.uniform(-1, 1, [30, 10, 32]).astype('float32') linear = paddle.nn.Linear(32, 64) data = paddle.to_tensor(data) x = linear(data) y = x.detach()
十进制到二进制
已解决
4#
回复于2021-12
我说一些个人的看法,帮助理解,仅供参考。 你可以将计算图理解成一棵树,从数据输入开始(根节点),每一层的卷积,池化操作,都是树向下的分支。网络的每个中间结果都是树上的节点,梯度在树上流动。现在的树分为静态树和动态树,paddlepaddle现在是动态树,就是你修改一个算子节点,会直接影响到其他的节点的结果。现在我们需要取网络模型的某个中间过程进行单独处理,就需要detah()将该数据从树上取下来,避免梯度流影响其他的算子结果。 如果照您的问法,我认为 detah()应该类似copy()的功能,没有单独开辟一块内存保存数据,区别就是不提供梯度的回溯。相对应的是clone(),与源张量不共享数据内存,但提供梯度的回溯。 如果对您有帮助,可以将该答案选为解决方案。
2
收藏
请登录后评论
返回一个新的Tensor,从当前计算图分离。
返回:与当前计算图分离的Tensor。
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/Tensor_cn.html#detach
这个官方文档看了,但是不太明白。 请问计算图是什么 ??
我说一些个人的看法,帮助理解,仅供参考。
你可以将计算图理解成一棵树,从数据输入开始(根节点),每一层的卷积,池化操作,都是树向下的分支。网络的每个中间结果都是树上的节点,梯度在树上流动。现在的树分为静态树和动态树,paddlepaddle现在是动态树,就是你修改一个算子节点,会直接影响到其他的节点的结果。现在我们需要取网络模型的某个中间过程进行单独处理,就需要detah()将该数据从树上取下来,避免梯度流影响其他的算子结果。
如果照您的问法,我认为 detah()应该类似copy()的功能,没有单独开辟一块内存保存数据,区别就是不提供梯度的回溯。相对应的是clone(),与源张量不共享数据内存,但提供梯度的回溯。
如果对您有帮助,可以将该答案选为解决方案。