Pytorch入门 - Day3

文章目录

  • 张量的广播和科学运算
    • 1. 张量的广播(broadcast)特性
      • 相同形状张量的计算
      • 不同形状的张量计算
        • 标量和任意形状的张量
        • 相同维度, 不同形状的张量之间计算
        • 不同维度的张量计算过程中的广播
    • 2. 逐点运算 (Pointwise Ops)
      • 数学基本运算函数
      • 数值调整函数
      • 常用科学运算
    • 3. 规约运算
    • 4. 比较运算

张量的广播和科学运算

1. 张量的广播(broadcast)特性

张量具备和Numpy相同的广播特性, 也就是允许不同形状张量之间进行计算

相同形状张量的计算

Same shapes are always broadcastable!
Pytorch入门 - Day3_第1张图片

不同形状的张量计算

广播的特性是在不同形状的张量进行计算时,一个或者多个张量通过隐式转化, 转化成相同形状的两个张量, 从而完成计算的特性.

标量和任意形状的张量

标量可以和任意形状的张量进行计算, 计算过程是标量和张量的每个元素进行计算
Pytorch入门 - Day3_第2张图片

相同维度, 不同形状的张量之间计算

回顾张量的形状
Pytorch入门 - Day3_第3张图片
两个张量形状不同,第一分量取值不同,但该分量上其中一个张量取值为1, 因此可以广播, 也就可以计算.
Pytorch入门 - Day3_第4张图片
Pytorch入门 - Day3_第5张图片
其中一个分量不为1
Pytorch入门 - Day3_第6张图片
每个分量都不一样, 但其中有1
Pytorch入门 - Day3_第7张图片
三维张量的广播

Pytorch入门 - Day3_第8张图片
Pytorch入门 - Day3_第9张图片
Pytorch入门 - Day3_第10张图片

Pytorch入门 - Day3_第11张图片

不同维度的张量计算过程中的广播

对于不同维度的张量,首先将低维的张量升维, 然后依据相同维度不同形状的张量广播规则进行广播. 而且低纬向量升维非常简单, 只需将更高维度方向的形状填充为1即可.

利用reshape升维

Pytorch入门 - Day3_第12张图片
不同维度,相同形状
Pytorch入门 - Day3_第13张图片

2. 逐点运算 (Pointwise Ops)

主要包括数学基本运算, 数值调整运算和数据科学运算三部分,相关函数如下:

数学基本运算函数

函数 描述
torch.add(t1,t2) t1, t2两个张量逐个元素相加,等效t1+t2
torch.subtract(t1,t2) t1, t2两个张量逐个元素相减,等效t1-t2
torch.multiply(t1,t2) t1, t2两个张量逐个元素相乘,等效t1*t2
torch.divide(t1,t2) t1, t2两个张量逐个元素相除,等效t1/t2

Pytorch入门 - Day3_第14张图片

数值调整函数

函数 描述
torch.abs(t) 返回绝对值
torch.ceil(t) 向上取整
torch.floor(t) 向下取整
torch.round(t) 四舍五入取整
torch.neg(t) 返回相反的数

Pytorch入门 - Day3_第15张图片
以上并不会改变t的值,如果需要原对象本身进行修改,可以考虑方法_()的表达方式, 对对象本身进行修改.
Pytorch入门 - Day3_第16张图片

除了上述数值调整函数有对应的同名方法,许多科学计算都有同名方法
Pytorch入门 - Day3_第17张图片

常用科学运算

Pytorch入门 - Day3_第18张图片
Pytorch入门 - Day3_第19张图片

很多张量的科学计算函数都不允许张量和python原生的数值型对象混合使用

Pytorch入门 - Day3_第20张图片

tensor的大多数科学运算具有一定的静态性

所谓静态性, 指的是对输入的张量类型有明确的要求, 例如部分函数只能输入浮点型张量, 而不能输入整型张量.
Pytorch入门 - Day3_第21张图片

Pytorch入门 - Day3_第22张图片

排序运算 同时返回排序结果和对应的索引值的排列

Pytorch入门 - Day3_第23张图片

3. 规约运算

规约运算指的是针对某张量进行某种总结,最后得出一个具体总结值的函数

统计分析函数 描述
torch.mean(t) 返回张量均值
torch.var(t) 返回张量方差
torch.std(t) 返回张量标准差
torch.var_mean(t) 返回张量方差和均值
torch.std_mean(t) 返回张量标准差和均值
torch.max(t) 返回张量最大值
torch.argmax(t) 返回张量最大值索引
torch.min(t) 返回张量最小值
torch.argmin(t) 返回张量最小值索引
torch.median(t) 返回张量中位数
torch.sum(t) 返回张量求和结果
torch.logsumexp(t) 返回张量各元素求和结果,适用于数据量较小的情况
torch.prod(t) 返回张量累乘结果
torch.dist(t1, t2) 计算两个张量的闵式距离,可使用不同范式
torch.topk(t) 返回t中最大的k个值对应的指标

Pytorch入门 - Day3_第24张图片
disk计算距离
disk函数可以计算闵式距离(闵可夫斯基距离),通过输入不同的p值,可以计算多种类型的距离,如欧式距离,街道距离等.
公式如下:
在这里插入图片描述
Pytorch入门 - Day3_第25张图片

规约运算的维度, 由于规约运算是一个序列返回一个结果,若是针对高维张量,则可指定某维度进行运算.

Pytorch入门 - Day3_第26张图片
Pytorch入门 - Day3_第27张图片
Pytorch入门 - Day3_第28张图片
Pytorch入门 - Day3_第29张图片
二维张量的排序

Pytorch入门 - Day3_第30张图片

4. 比较运算

函数 描述
torch.eq(t1,t2) 比较t1,t2各元素是否相等,等效==
torch.equal(t1,t2) 判断两个张量是否是相同的张量
torch.gt(t1,t2) 比较t1各元素是否大于t2各元素,等效>
torch.lt(t1,t2) 比较t1各元素是否小于于t2各元素,等效<
torch.ge(t1,t2) 比较t1各元素是否大于或等于t2各元素,等效>=
torch.le(t1,t2) 比较t1各元素是否小于或等于t2各元素,等效<=
torch.ne(t1,t2) 比较t1, t2各元素是否不相同,等效!=

Pytorch入门 - Day3_第31张图片

你可能感兴趣的:(Pytorch,pytorch,机器学习,深度学习)