Pytorch Tensor的统计属性实例讲解


Posted in Python onDecember 30, 2019

1. 范数

示例代码:

import torch
 
a = torch.full([8], 1)
b = a.reshape([2, 4])
c = a.reshape([2, 2, 2])
 
# 求L1范数(所有元素绝对值求和)
print(a.norm(1), b.norm(1), c.norm(1))
# 求L2范数(所有元素的平方和再开根号)
print(a.norm(2), b.norm(2), c.norm(2))
 
# 在b的1号维度上求L1范数
print(b.norm(1, dim=1))
# 在b的1号维度上求L2范数
print(b.norm(2, dim=1))
 
# 在c的0号维度上求L1范数
print(c.norm(1, dim=0))
# 在c的0号维度上求L2范数
print(c.norm(2, dim=0))

输出结果:

tensor(8.) tensor(8.) tensor(8.)
tensor(2.8284) tensor(2.8284) tensor(2.8284)
tensor([4., 4.])
tensor([2., 2.])
tensor([[2., 2.],
  [2., 2.]])
tensor([[1.4142, 1.4142],
  [1.4142, 1.4142]])

2. 一些常用操作

(1)均值、累加、最小、最大、累积

示例代码:

b = torch.arange(8).reshape(2, 4).float()
print(b)
# 均值,累加,最小,最大,累积
print(b.mean(), b.sum(), b.min(), b.max(), b.prod())
# 打平后的最小最大值索引
print(b.argmax(), b.argmin())

输出结果:

tensor([[0., 1., 2., 3.],
  [4., 5., 6., 7.]])
tensor(3.5000) tensor(28.) tensor(0.) tensor(7.) tensor(0.)
tensor(7) tensor(0)

注意:上面的argmax、argmin操作默认会将Tensor打平后取最大值索引和最小值索引,如果不希望Tenosr打平,而是求给定维度上的索引,需要指定在哪一个维度上求最大值索引或最小值索引。

比如,有shape=[4, 10]的Tensor,表示4张图片在10分类的概率结果,我们需要知道每张图片的最可能的分类结果:

a = torch.rand(4, 10)
print(a)
# 在第二维度上求最大值索引
print(a.argmax(dim=1))

输出结果:

tensor([[0.0711, 0.5641, 0.7945, 0.6964, 0.3609, 0.5817, 0.1705, 0.6913, 0.1263,
   0.8346],
  [0.0810, 0.0771, 0.1983, 0.0344, 0.1067, 0.9591, 0.8515, 0.3046, 0.0491,
   0.1291],
  [0.3527, 0.2676, 0.9859, 0.2656, 0.1985, 0.3759, 0.8221, 0.3571, 0.5340,
   0.7759],
  [0.0969, 0.3954, 0.5478, 0.3543, 0.8253, 0.9291, 0.4960, 0.4390, 0.3780,
   0.5858]])
tensor([9, 5, 2, 5])

(2)直接使用max和min配合dim参数也可以获得最值索引,同时得到最值的具体值:

print(c.max(dim=1))

输出结果:

(tensor([0.9589, 1.7394, 1.3448, 2.2079]), tensor([2, 2, 5, 7]))

(3)使用keepdim=True可以保持应有的dim,即仅仅是将求最值的那个dim的size变成了1,返回的结果是符合原Tensor语义的。

print(c.argmax(dim=1, keepdim=True))
print(c.max(dim=1, keepdim=True))

输出结果:

tensor([[2],
  [2],
  [5],
  [7]])
(tensor([[0.9589],
  [1.7394],
  [1.3448],
  [2.2079]]), tensor([[2],
  [2],
  [5],
  [7]]))

(4)取前k大/前k小/第k小的概率值及其索引

使用topk代替max可以完成更灵活的需求,有时候不是仅仅要概率最大的那一个,而是概率最大的k个。如果不是求最大的k个,而是求最小的k个,只要使用参数largest=False,kthvalue还可以取第k小的概率值及其索引。

示例代码:

# 2个样本,分为10个类别的置信度
d = torch.randn(2, 10) 
# 最大概率的3个类别
print(d.topk(3, dim=1)) 
# 最小概率的3个类别
print(d.topk(3, dim=1, largest=False)) 
# 求第8小概率的类别(一共10个那就是第3大)
print(d.kthvalue(8, dim=1))

输出结果:

(tensor([[2.0692, 1.6490, 0.9526],
  [1.5983, 1.5737, 1.5532]]), tensor([[6, 3, 5],
  [8, 1, 2]]))
(tensor([[-1.0023, -0.6423, 0.0655],
  [-1.2959, -1.1504, -0.9859]]), tensor([[4, 0, 2],
  [0, 5, 3]]))
(tensor([0.9526, 1.5532]), tensor([5, 2]))

(5)比较操作

示例代码:

import torch
 
a = torch.randn(2, 3)
b = torch.randn(2, 3)
print(a)
print(b)
# 比较是否大于0,是对应位置返回1,否对应位置返回0,注意得到的是ByteTensor
print(a > 0) 
print(torch.gt(a, 0))
# 是否不等于0,是对应位置返回1,否对应位置返回0
print(a != 0)
# 比较每个位置是否相等,是对应位置返回1,否对应位置返回0
print(torch.eq(a, b)) 
# 比较每个位置是否相等,全部相等时才返回True
print(torch.equal(a, b), torch.equal(a, a))

输出结果:

tensor([[-0.1425, -1.1142, 0.2224],
  [ 0.6142, 1.7455, -1.1776]])
tensor([[-0.0774, -1.1012, -0.4862],
  [-0.3110, -0.2110, 0.0381]])
tensor([[0, 0, 1],
  [1, 1, 0]], dtype=torch.uint8)
tensor([[0, 0, 1],
  [1, 1, 0]], dtype=torch.uint8)
tensor([[1, 1, 1],
  [1, 1, 1]], dtype=torch.uint8)
tensor([[0, 0, 0],
  [0, 0, 0]], dtype=torch.uint8)
False True

以上这篇Pytorch Tensor的统计属性实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python Flask-web表单使用详解
Nov 18 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
python爬虫之urllib3的使用示例
Jul 09 Python
解决python Markdown模块乱码的问题
Feb 14 Python
python opencv 简单阈值算法的实现
Aug 04 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python生成随机验证码代码实例解析
Jun 09 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
Python爬虫基础初探selenium
May 31 Python
PyTorch中permute的用法详解
Dec 30 #Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 #Python
Pytorch Tensor基本数学运算详解
Dec 30 #Python
python垃圾回收机制(GC)原理解析
Dec 30 #Python
利用Python代码实现一键抠背景功能
Dec 29 #Python
如何利用pygame实现简单的五子棋游戏
Dec 29 #Python
Python使用正则实现计算字符串算式
Dec 29 #Python
You might like
php堆排序实现原理与应用方法
2015/01/03 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python实现的二维码生成小软件
2014/07/11 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
python模块之paramiko实例代码
2018/01/31 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python如何读取bin文件并下发串口
2019/07/05 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
解释i节点在文件系统中的作用
2013/11/26 面试题
硕士研究生求职自荐信范文
2014/03/11 职场文书
公司合作协议书范本
2014/04/18 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
年终工作总结范文
2019/06/20 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python