tensor的创建与使用
学习张量是学习深度学习的基础,每个深度学习框架学习之前都要对张量有足够多的了解。本文基于pytorch深度学习框架。
张量的创建
创建张量一般使用:
torch.tensor()
张量也有类似数组一样的dtype属性
t = torch.tensor([1,2])
t.dtype
pytorch中张量的类型
数据类型 | dtype |
---|---|
32bit浮点数 | torch.float32或torch.float |
64bit浮点数 | torch.float64或torch.double |
16bit浮点数 | torch.float16或torch.half |
8bit无符号整数 | torch.unit8 |
8bit有符号整数 | torch.int8 |
16bit有符号整数 | torch.int16或torch.short |
16bit有符号整数 | torch.int16或torch.short |
32bit有符号整数 | torch.int32或torch.int |
64bit有符号整数 | torch.int64或torch.long |
布尔型 | torch.bool |
复数型 | torch.complex64 |
张量类型的转变
t = torch.tensor([1,2])
t.float()
t.double()
t.short()
t.half()
类型的转变参考上一个表格。
张量的维度与形变
张量的维度
查看张量的维度:
t.ndim()
查看张量的形状/大小:
t.shape()
t.size()
两行命令输出结果一致。
高维张量的解读
torch.size([2,2,3])
上述结果表示张量由2个2行3列的矩阵构成。
张量的形变
拉直:
t = torch.tensor([[1,2],[3,4]])
t .ndim
这是一个二维张量
t.flatten()
t.ndim
拉直后变为一维。
reshape可对张量进行任意形状的改变
t.reshape(a,b,c)
a,b,c,就是描述张量形状的参数
一些特殊的张量创建
全0张量:
torch.zeros([2,3])
tensor([[0., 0., 0.], [0., 0., 0.]])
全1张量:
torch.ones([2,3])
单位矩阵:
torch.eyes(4)
4阶单位阵
张量的深拷贝
简单的张量赋值过程会指向同一个对象。如
t = torch.tensor([1,2,3.4])
t1 = t
t1
将t赋值给了t1,此时两者皆指向同一个tensor
t[0] = 10
t
此时将t的第一个位置变成10,t1也发生改变。
t1
若想两个张量指向不同的对象
t2 = t.clone()
此时t2与t互不干扰。
一些补充
带——like函数的用法
t = torch.tensor([1,2])
t1 = torch.full_like(t,3) #根据t的形状,填充数值3
张量转换成列表
t.tolist()
type(t)
将一维张量的数值取出
t = torch.tensor([1])
t.item()
张量的数值个数
t = torch.tensor([[1,2],[5,6]])
t.numel()
len(t)
numel返回的是4,len(t)返回的是2