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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
python实现识别相似图片小结
Feb 22 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
python交互式图形编程实例(一)
Nov 17 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
Python骚操作之动态定义函数
Mar 26 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
python中p-value的实现方式
Dec 16 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 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
推荐文章系统(一)
2006/10/09 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
ucenter通信原理分析
2015/01/09 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
微信小程序文章详情功能完整实例
2020/06/03 Javascript
python支持断点续传的多线程下载示例
2014/01/16 Python
python获取外网ip地址的方法总结
2015/07/02 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python with标签使用方法解析
2020/01/17 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
信用卡工资证明格式
2014/09/13 职场文书
齐云山导游词
2015/02/06 职场文书
小兵张嘎观后感
2015/06/03 职场文书
教师节祝酒词
2015/08/11 职场文书
学习经验交流会策划书
2015/11/02 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫