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类和继承用法实例
Jul 07 Python
Python中文竖排显示的方法
Jul 28 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python tornado修改log输出方式
Nov 18 Python
Django 限制访问频率的思路详解
Dec 24 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 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和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
详解php中 === 的使用
2016/10/24 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
jQuery参数列表集合
2011/04/06 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
简单的Vue异步组件实例Demo
2017/12/27 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python自动连接ssh的方法
2015/03/07 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
Python sorted对list和dict排序
2020/06/09 Python
python进度条显示之tqmd模块
2020/08/22 Python
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
临床医学应届生求职信
2013/11/06 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
义和团口号
2014/06/17 职场文书
移交协议书
2014/08/19 职场文书
美容院合作经营协议书
2014/10/10 职场文书
2014年客房部工作总结
2014/11/22 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
python中的random模块和相关函数详解
2022/04/22 Python
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python