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 按照固定长度分割字符串的方法小结
Apr 30 Python
在windows下Python打印彩色字体的方法
May 15 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Selenium定位元素操作示例
Aug 10 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
pandas中pd.groupby()的用法详解
Jun 16 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插件 HTMLPurifier HTML解析器
2013/07/01 PHP
为你总结一些php系统类函数
2015/10/21 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
Prototype Date对象 学习
2009/07/12 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Python中字符串对齐方法介绍
2015/05/21 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
tensorflow自定义激活函数实例
2020/02/04 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
基于python实现操作git过程代码解析
2020/07/27 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
Python之Sklearn使用入门教程
2021/02/19 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
工业设计专业自荐书
2014/06/05 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
python基础之//、/与%的区别详解
2022/06/10 Python