detach()的作用
detach()函数返回一个和源张量同shape、dtype和device的张tensor,是从当前计算图中分离下来的,与源张量共享数据内存,仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个tensor永远不需要计算其梯度,不具有grad。即使之后重新将它的requires_grad置为true,它也不会具有梯度grad。
注意:使用detach返回的tensor和原始的tensor共同一个内存,即一个修改另一个也会跟着改变
Tensor.detach() 的作用是阻断反向梯度传播,当我们在训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整;或者只训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一些分支的反向传播,例如在生成对抗网络的训练当中,在训练判别器的时候不需要生成器进行反向梯度传播,这时候就会使用到 detach()。
import torch
a = torch.tensor(2.0, requires_grad=True)
y = a