pytorch中关于detach clone 梯度等一些理解

pytorch中有时需要复制一下张量(tensor),如果实在迭代过程中就会涉及到梯度的问题。

我了解的常用的tensor复制方式有两种  .detach()和.clone()

1、.detach()方法,比如已有tensor a ,b=a.detach(),则相当于给a起了个别名b,两个在内存中实际是一个东西,但是在计算梯度时,梯度从后面传到b不会再往前传了,到这就截止了。当只需要tensor数值,不需要往前的梯度或者故意将梯度在这儿截断时可以用这个方法。

2、.clone()方法,与上面正相反,如果c=a.clone(),那么c跟a在内存中是两个tensor,改变其中一个不会对另一个的数值造成影响,但是c拥有与a相同的梯度回传路线,保留了继续回传梯度的功能,但不再共享存储。

3、 开始都对tensor这一数据类型比较熟悉,看博客有时会看到variable,形象地理解为这是另一种数据格式,tensor属于variable的一部分,tensor只包含数值,除了tensor,variable还有梯度值,梯度是否可计算等等属性(维度更广了),在迭代过程中从variable变量中取出tensor的操作时不可逆的,因为已经丢失了有关梯度的一切信息。

4、另外这是一个关于backword()函数简单实例,内容清晰易懂,把回溯过程说的很清楚

猜你喜欢

转载自blog.csdn.net/qq_41872271/article/details/109060557