pytorch-tensor
张量(Tensor)的属性
数据类型 dtype
张量的互相操作要同类型
新版pytorch自动转换类型
1 | >>> t = torch.Tensor() |
在内存中的布局
1 | >>> t.layout |
设备
使用多设备时,张量之间的操作必须存在于同一个设备
1 | >>> t.device |
Rank(阶数)
常量: rank 0
向量: rank 1
矩阵: rank 2
n维张量: rank n
Shape(形状)
指明每一层有多少个元素
1 | >>> a = torch.Tensor([1,2,3]) |
a.rank = len(a.shape)
图像中的例子:
1 | # [B,C,H,W] |
创建张量
使用现有的数据创建张量
1 | >>> data = np.array([1,2,3,]) |
构造函数,使用默认的数据类型,复制数据
1
2>>> torch.Tensor(data)
tensor([1., 2., 3.])(推荐)工厂函数,使用相同的数据类型(或人为指定),复制数据
1
2>>> torch.tensor(data)
tensor([1, 2, 3])工厂函数,使用相同的数据类型(或人为指定),只接受numpy数组,共享数据
1
2>>> torch.from_numpy(data)
tensor([1, 2, 3])(推荐)工厂函数,使用相同的数据类型(或人为指定),不只是numpy数组,共享数据
1
2>>> torch.as_tensor(data)
tensor([1, 2, 3])
使用特定数据或随机数创建张量
1 | >>> torch.eye(3) |
对张量形状的基本操作
View
view 和 reshape 的区别?
Reshape
怎么实现的?看源码
通过reshape可以改变形状或阶数
获得元素个数
1 | >>> t = torch.tensor([[1,1,1,1,],[2,2,2,2,],[3,3,3,3,],],dtype=torch.float32) |
元素个数要一样
1 | >>> t = torch.tensor([[1,1,1,1,],[2,2,2,2,],[3,3,3,3,],],dtype=torch.float32) |
Squeeze
1 | # original |
flatten
pytorch自带的flatten()
1 | >>> d |
自己构造
1 | # 第一种方法 |
同阶合并 cat()
1 | >>> a |
升阶合并 stack()
1 | >>> a |
广播(Broadcasting)
一些取出张量的操作
.item()
只适用于仅拥有一个元素的张量,对维数没有要求,返回张量内部的数据(基本的python数字类型)
.tolist()
类似.item(), 返回list
.numpy()
Returns self tensor as a NumPy ndarray