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实现在pickling的时候压缩的方法
Sep 25 Python
Python的Django框架中settings文件的部署建议
May 30 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
Python实现感知机(PLA)算法
Dec 20 Python
Python for循环中的陷阱详解
Jul 13 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
如何在django中实现分页功能
Apr 22 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
python爬虫框架feapde的使用简介
Apr 20 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.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
jQuery实现跨域
2015/02/03 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python实现绘制树枝简单示例
2014/07/24 Python
python中__call__方法示例分析
2014/10/11 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python探索之修改Python搜索路径
2017/10/25 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
详解Python传入参数的几种方法
2019/05/16 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
初中家长寄语
2014/04/02 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2014年标准化工作总结
2014/12/17 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
二年级作文之动物作文
2019/11/13 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
SQLServer中exists和except用法介绍
2021/12/04 SQL Server