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单元素tensorTensor.tensor([]), size:torch.Size([0])~ 空Tensor.tensor([1, 2]), size:torch.Size([2])~tensorTensor.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])