-
d
e
t
a
c
h
\rm detach
detach 意为分离,对某个张量调用函数
d
e
t
a
c
h
(
)
\rm detach()
detach() 的作用是返回一个
T
e
n
s
o
r
\rm Tensor
Tensor,它和原张量的数据相同,但
r
e
q
u
i
r
e
s
_
g
r
a
d
=
F
a
l
s
e
\rm requires\_grad=False
requires_grad=False,也就意味着
d
e
t
a
c
h
(
)
\rm detach()
detach() 得到的张量不会具有梯度。这一性质即使我们修改其
r
e
q
u
i
r
e
s
_
g
r
a
d
\rm requires\_grad
requires_grad 属性也无法改变。
- 记
d
e
t
a
c
h
(
)
\rm detach()
detach() 得到的张量为
d
e
\rm de
de,后续基于
d
e
\rm de
de 继续进行计算,那么反向传播过程中,遇到调用了
d
e
t
a
c
h
(
)
\rm detach()
detach() 方法的张量就会终止 (强调
d
e
\rm de
de 没有梯度),不会继续向后计算梯度。
import torch
x = torch.ones(2,2,requires_grad=True)
y = torch.add(x,2)
de = y.detach()
z = torch.mul(de,de)*3
z.requires_grad = True
out = z.mean()
print(x)
print(y)
print(de)
print(z)
print(out)
out.backward()
print(z.grad)
'''
tensor([[0.2500, 0.2500],
[0.2500, 0.2500]])
'''
|