[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a

Tensor的创建

tensor()

t=torch.tensor(a)
a可以是列表,ndarray,tensor
对于ndarray和tensor来说,t是一个copy,对t的任何操作都不会影响原有数据。
[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第1张图片

随机

和numpy中随机语法类似

rand:在(0,1)的均匀分布中sample
randn: 在N(0,1)的正态分布中sample

[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第2张图片

Tensor的复制

t=tensor(a)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
t将a中的数据读出,然后创建一个新的叶节点。

t=a.clone()

[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第3张图片
clone()是在原有的计算图中添加一个与a相同的节点,可以看到这个节点是有grad_fn的,也就是说他是由a通过clone函数生成的

t=a.detach()与t=a.data

[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第4张图片
[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第5张图片这两者都是对a的引用,对t的修改会影响到a,但是.data存在梯度危险,所以在v0.4之后已经不再使用。
这两者不同于下面直接赋值的地方是,他们是从原计算图中剥离出来的,分配了新的内存地址,而不仅仅是一个别名。

t=a

[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第6张图片
python中赋值实际上是引用,可以看到t和a指向同一个内存地址。

t=a.clone().detach()

这种方式和tensor(a)是等价的
[Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a_第7张图片

你可能感兴趣的:([Pytorch01]Tensor的创建与复制:tensor(a),detach(a),clone(a),=a)