import torch.tensor as Tensor
tensor = Tensor.randn(10)
数据复制
tensor
对象与numpy
对象的数据转换
共享内存:
tensor
->numpy
:tensor.numpy()
numpy
->tensor
:Tensor.from_numpy()
不共享内存:
tensor
->numpy
:tensor.clone().numpy()
numpy
->tensor
:tensor.from_numpy(array.copy())
tensor
对象之间的复制
- 共享内存:
tensor.detach()
,从计算图中分离,不计算梯度 - 不共享内存:
tensor.clone()
,是否计算梯度,看原tensor
的配置 - Deprecated 不共享内存:
tensor()
,是否计算梯度,看构造函数的传参
cpu
向 gpu
的转换
- 拷贝到 GPU:
tensor.cuda()
- 转换到 GPU:
tensor.to()
Tensor
类与tensor
对象的操作
从tensor
中获取元素
- 下标访问得到一个
0-dim
的scalar
- 使用下标访问 +
item()
得到元素的值 - 单元素
tensor
也可以使用item()
整数类型除法
计算数据类型为 Tensor.uint8, Tensor.int8, Tensor.int16, Tensor.int32, Tensor.int64
或者张量类型为 Tensor.CharTensor, Tensor.ShortTensor, Tensor.IntTensor, Tensor.LongTensor
的浮点数类型除法时,使用 Tensor.true_divide(tensor1, tensor2)
Tensor
构造的 Tensor.Size
问题
Tensor.tensor(3.14159)
, size:torch.Size([])
~scalar
单元素tensor
Tensor.tensor([])
, size:torch.Size([0])
~ 空Tensor.tensor([1, 2])
, size:torch.Size([2])
~tensor
Tensor.Tensor(1, 2)
, size:torch.Size([1, 2])
~ 规定tensor
大小的初始化方式
综合,传入一个list
,两种构造方法都是将list
转换成一个tensor
;
传入数字,Tensor.tensor
只接受单个数字用于构造scalar
,Tensor.Tensor
用于构造对应大小Tensor
tensor
的大小改变
tensor.view()
创造一个共享内存的新 tensortensor.squeeze(), tensor.unsqueeze()
减少、添加一个维度,创造一个共享内存的新 tensortensor.resize()
如果新分配空间大小小于原空间,保留数据不删除
tensor
的索引
tensor[0:1, :2]
, size:torch.Size([1, 2])
;tensor[0, :2]
, size:torch.Size([2])
None
相当于np.newaxis
,新增一个轴:tensor[None].shape
, size:torch.Size([1, 10])