PyTorch中tensor.detach()とtensor.dataの違い
PyTorch0.4では、
tensor.detach()
.data
は保持されているが、.detach()
を使用することを推奨し、.data
がx
と同じデータtensor
を返すのとは異なるが、x
の計算履歴には含まれず、require s_grad = False
は、x.data
がautograd
に追跡されて微分を求めることができないため、安全ではない場合がある..detach()
は、同じデータのtensor
を返し、requires_grad=False
であるが、in-place
の動作によりautograd
に逆伝播を行う場合に報告することができる.例:tensor.data >>> a = torch.tensor([1,2,3.], requires_grad =True)
>>> out = a.sigmoid()
>>> c = out.data
>>> c.zero_()
tensor([ 0., 0., 0.])
>>> out # out c.zero_()
tensor([ 0., 0., 0.])
>>> out.sum().backward() #
>>> a.grad # , out
tensor([ 0., 0., 0.])
tensor.detach()
>>> a = torch.tensor([1,2,3.], requires_grad =True)
>>> out = a.sigmoid()
>>> c = out.detach()
>>> c.zero_()
tensor([ 0., 0., 0.])
>>> out # out c.zero_() !!
tensor([ 0., 0., 0.])
>>> out.sum().backward() # out , c.zero_() ,
RuntimeError: one of the variables needed for gradient
computation has been modified by an