张量的元素类型
到目前为止,已熟知张量的基本知识,但是还没有不晓得可以在张量中储存什么类型,数据科学库依赖于numpy或引入专用的数据结构,如pytorch张量,提供数字类型的数据的有效底层实现和相关操作,并将这些封装在一个方便的高级api中,要实现这一点,张量中的对象必须是相同类型的数字,pytorch必须跟踪这个数字类型
使用dtype指定数字类型
张量构造函数通过dtype参数指定包含在张量中的数字的数据类型,如tensor和zeros和ones函数,数据 类型用于指定张量可以保存的可能值,dtype参数类似于同名的标准numpy参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| torch.float32或torch.float:32位浮点数。 torch.float64或torch.double:64位双精度浮点数。 torch.float16或torch.half:16位半精度浮点数。 torch.int8:8位有符号整数。 torch.uint8:8位无符号整数。 torch.int16或torch.short:16位有符号整数。 torch.int32或torch.int:32位有符号整数。 torch.int64或torch.long:64位有符号整数。 torch.bool:布尔型。张量的默认数据类型是32位浮点数。 用法 # 创建float32类型张量(默认) a = torch.ones(3, dtype=torch.float32)
# 创建float64(双精度)张量 b = torch.randn(6, dtype=torch.float64)
# 创建int32类型张量 c = torch.zeros(4, dtype=torch.int32)
|
管理张量的dtype属性
为了给张量分配一个正确的数字类型,我们可以指定适当的dtype作为构造函数的参数,如:
1
| a = torch.ones(3, dtype=torch.float32)
|
可以通过访问相对应的属性dtype来访问一个张量的类型
还可以使用相对应的转换方法将张量创建函数的输出转化为正确的类型,
1 2 3 4 5
| double_points = torch.zeros(10, 2).double() short_points = torch.ones(10, 2).short() 或者使用更方便的方法: double_points = torch.zeros(10, 2).to(torch.double) short_points = torch.ones(10, 2).to(dtype=torch.short)
|
在操作中输入多种类型的时候,输入会自动向较大类型转换,因此,如果我们想要进行32位计算,我们需要确保所有的输入都是32位的
1 2 3 4 5
| points_64 = torch.rand(5, dtype=torch.double) points_short = points_64.to(torch.short) points_64 * points_short tensor([0., 0., 0., 0., 0.], dtype=torch.float64)
|
张量的api
到此,了解了什么是张量,以及他们在底层是如何工作的,关于张量以及张量种的绝大多数操作都可以在torch模块种找到,如transpose函数
1
| 在PyTorch中,张量(Tensor)的API是指所有可以对张量进行操作和变换的方法和属性的集合。
|
对张量操作按组进行划分
1 2 3 4 5 6 7 8 9 10 11
| 创建操作—用于构造张量的函数,如ones()和from_numpy()。 索引、切片、连接、转换操作—用于改变张量的形状、步长或内容的函数,如transpose()。 数学操作—通过运算操作张量内容的函数: ● 逐点操作—通过对每个元素分别应用一个函数来得到一个新的张量,如abs()和 cos(); ● 归约操作—通过迭代张量来计算聚合值的函数,如mean()、std()和norm(); ● 比较操作—在张量上计算数字谓词的函数,如equal()和max(); ● 频谱操作—在频域中进行变换和操作的函数; ● 其他操作—作用于向量的特定函数(如cross()),或对矩阵进行操作的函数(如 trace()); ● BLAS和LAPACK操作—符合基本线性代数子程序(Basic Linear Algebra Subprogram,BLAS)规范的函数,用于标量、向量—向量、矩阵—向量和矩阵—矩阵操作。随机采样—从概率分布中随机生成值的函数,如randn()和normal()。 序列化—保存和加载张量的函数,如load()和save()。 并行化—用于控制并行CPU执行的线程数的函数,如set_num_threads()。
|