老师,我想请教一下对于tensor的inplace操作、tensor的内存共享以及tensor的id的理解,例如(我在torch中找的例子,感觉tensorflow也差不多吧)
import torch
a = torch.tensor([10., 5., 2., 3.], requires_grad=True)
print(a, id(a))
print(a.detach(),id(a.detach()))
a.detach()[0]=100
print(a, id(a))
print(a.detach(),id(a.detach()))
输出结果为:
tensor([10., 5., 2., 3.], requires_grad=True) 1317176466240
tensor([10., 5., 2., 3.]) 1317176466600
tensor([100., 5., 2., 3.], requires_grad=True) 1317176466240
tensor([100., 5., 2., 3.]) 1317176466456
a.detach()是inplace操作,它和a是共享内存的,但为什么id()却不一样呢?
再例如:
import torch
a = torch.tensor([10., 5., 2., 3.], requires_grad=True)
b=a.view(2,2)
b[0,0]=100
print(a)
print(b)
print(id(a))
print(id(b))
print(id(a[0]))
print(id(b[0,0]))
运行结果:
tensor([100., 5., 2., 3.], grad_fn=<CopySlices>)
tensor([[100., 5.],
[ 2., 3.]], grad_fn=<AsStridedBackward>)
1923176101928
1923215241720
1923215243088
1923215243088
这里也很奇怪,为什么tensor的shape都不同,却是内存共享的呢,但即使是内存共享,id(a)和id(b)却不一样,而id(a[0])与id(b[0,0])确是一致的,那两个tensor内存共享到底是指的什么呢?不是两个tensor的内存地址一样吗?