PyTorch中Tensor的数据统计示例


Posted in Python onFebruary 17, 2020

张量范数:torch.norm(input, p=2) → float

返回输入张量 input 的 p 范数

举个例子:

>>> import torch
>>> a = torch.full([8], 1)
>>> b = a.view(2, 4)
>>> c = a.view(2, 2, 2)
>>> a.norm(1), b.norm(1), c.norm(1)	# 求 1- 范数
(tensor(8.), tensor(8.), tensor(8.))
>>> a.norm(2), b.norm(2), c.norm(2)	# 求 2- 范数
(tensor(2.8284), tensor(2.8284), tensor(2.8284))
>>> a.norm(3), b.norm(3), c.norm(3)# 求 ∞- 范数
(tensor(2.), tensor(2.), tensor(2.))
>>> b
tensor([[1., 1., 1., 1.],
    [1., 1., 1., 1.]])
>>> b.norm(1, 1) # 在 1 维度上求 1- 范数
tensor([4., 4.])
>>> b.norm(2, 1) # 在 1 维度上求 2- 范数
b.norm(1, 2)
>>> c
tensor([[[1., 1.],
     [1., 1.]],

    [[1., 1.],
     [1., 1.]]])
>>> c.norm(1, 0) # 在 0 维度上求 1- 范数
tensor([[2., 2.],
    [2., 2.]])
>>> c.norm(2, 0) # 在 0 维度上求 2- 范数
tensor([[1.4142, 1.4142],
    [1.4142, 1.4142]])

只有一个参数时,表示对整个张量求范数,参数表示范数的幂指数值。

有两个参数时,表示在张量某一维度对尺寸中每一部分求范数,第一个参数是范数的幂指数值,第二个参数是选择的维度。

张量统计

最基础的统计方法,比如张量中的最小值、最大值、均值、累加、累积。

举个例子:

>>> a = torch.arange(8).view(2, 4).float()
>>> a
tensor([[0., 1., 2., 3.],
    [4., 5., 6., 7.]])
>>> a.min(), a.max(), a.mean(), a.sum(), a.prod() # 分别求最小值、最大值、均值、累加、累积
(tensor(0.), tensor(7.), tensor(3.5000), tensor(28.), tensor(0.))
>>> a.argmin(), a.argmax() # 分别是把张量打平后最小值、最大值的索引
(tensor(0), tensor(7))
>>> a.argmin(1), a.argmax(1) # 不打平求 1 维度中每一部分最小值、最大值的索引
(tensor([0, 0]), tensor([3, 3]))

dim和keepdim

>>> a = torch.randn(5, 10)
>>> a
tensor([[-0.6346, -0.9074, 0.1525, 0.1901, -0.5391, -0.2437, 1.0150, -0.0427,
     -1.5336, 0.8542],
    [-0.1879, 1.9947, -0.3524, -1.2559, -0.8129, -0.3018, 0.5654, 0.8428,
     -0.3517, -0.7787],
    [ 0.0686, 0.6166, 0.2632, -0.0947, -0.5592, -1.4041, 1.5565, 1.5616,
     -1.3076, -0.1137],
    [ 0.5205, -1.5716, -1.1277, 0.8096, -0.2123, -0.0974, 0.7698, 1.1373,
     0.5165, 0.5256],
    [-0.4162, 0.3170, 0.2368, 1.1695, -0.1960, -0.3285, 0.2420, 1.6468,
     0.2646, 0.4573]])
>>> a.max(dim=1)
(tensor([1.0150, 1.9947, 1.5616, 1.1373, 1.6468]), tensor([6, 1, 7, 7, 7]))
>>> a.argmax(dim=1)
tensor([6, 1, 7, 7, 7])

max 添加 dim 后不仅显示了 1 维度中每一部分的最大值,还显示了其索引

>>> a.max(dim=1, keepdim=True)
(tensor([[1.0150],
    [1.9947],
    [1.5616],
    [1.1373],
    [1.6468]]), tensor([[6],
    [1],
    [7],
    [7],
    [7]]))
>>> a.argmax(dim=1, keepdim=True)
tensor([[6],
    [1],
    [7],
    [7],
    [7]])

保持维度一致。添加 keepdim 后,得出的结果维度不改变,原来是二维的数据,得出的结果还是二维。不添加得出的结果就是一维的。

比较操作

torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)

沿给定 dim 维度返回输入张量 input 中 k 个最大值。 如果不指定 dim,则默认为 input 的最后一维。 如果为 largest 为 False ,则返回最小的 k 个值。

返回一个元组 (values,indices),其中 indices 是原始输入张量 input 中测元素下标。 如果设定布尔值 sorted 为_True_,将会确保返回的 k 个值被排序。

torch.kthvalue(input, k, dim=None, out=None) -> (Tensor, LongTensor) 取输入张量 input 指定维上第 k 个最小值。如果不指定 dim,则默认为 input 的最后一维。

返回一个元组 (values,indices),其中indices是原始输入张量input中沿dim维的第 k 个最小值下标。

举个例子:

>>> b = torch.randn(5, 10)
>>> b
tensor([[ 0.1863, 0.0160, -1.0657, -1.8984, 2.3274, 0.6534, 1.8126, 1.8666,
     0.4830, -0.7800],
    [-0.9359, -1.0655, 0.8321, 1.6265, 0.6812, -0.2870, 0.6987, 0.6067,
     -0.1318, 0.7819],
    [-3.1129, 0.9571, -0.1319, -1.0016, 0.7267, 0.1060, -0.2926, 0.3492,
     1.0026, 0.2924],
    [-0.7101, -0.8327, 0.5463, 0.3805, -0.8720, -1.6723, 0.0365, 1.5540,
     0.1940, 1.4294],
    [ 0.4174, -0.9414, -0.0351, -1.6142, -0.7802, -2.3916, -2.4822, 0.7233,
     -0.7037, 0.2725]])
>>> b.topk(3, dim=1)
(tensor([[2.3274, 1.8666, 1.8126],
    [1.6265, 0.8321, 0.7819],
    [1.0026, 0.9571, 0.7267],
    [1.5540, 1.4294, 0.5463],
    [0.7233, 0.4174, 0.2725]]), tensor([[4, 7, 6],
    [3, 2, 9],
    [8, 1, 4],
    [7, 9, 2],
    [7, 0, 9]]))
>>> b.topk(3, dim=1, largest=False)
(tensor([[-1.8984, -1.0657, -0.7800],
    [-1.0655, -0.9359, -0.2870],
    [-3.1129, -1.0016, -0.2926],
    [-1.6723, -0.8720, -0.8327],
    [-2.4822, -2.3916, -1.6142]]), tensor([[3, 2, 9],
    [1, 0, 5],
    [0, 3, 6],
    [5, 4, 1],
    [6, 5, 3]]))
>>> a.kthvalue(8, dim=1)
(tensor([0.1034, 0.8940, 0.6155, 0.4210, 0.1955]), tensor([1, 2, 6, 4, 7]))

topk 添加 largest=False 就是返回最小,不添加就是返回最大。

kthvalue 返回以从大到小排列的指定位置的数。上面代码中即为返回第 8 小的数。

torch.eq(input, other, out=None) → Tensor

比较元素相等性。第二个参数可为一个数或与第一个参数同类型形状的张量。

torch.equal(tensor1, tensor2) → bool

如果两个张量有相同的形状和元素值,则返回 True ,否则 False。

举个例子:

>>> a = torch.ones(2, 3)
>>> b = torch.randn(2, 3)
>>> torch.eq(a, b)
tensor([[0, 0, 0],
    [0, 0, 0]], dtype=torch.uint8)
>>> torch.eq(a, a)
tensor([[1, 1, 1],
    [1, 1, 1]], dtype=torch.uint8)
>>> torch.equal(a, a)
True

eq 比较张量中的每个数据,equal 比较整个张量

以上这篇PyTorch中Tensor的数据统计示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python设置检查点简单实现代码
Jul 01 Python
跟老齐学Python之集合的关系
Sep 24 Python
浅析Python中的序列化存储的方法
Apr 28 Python
浅谈MySQL中的触发器
May 05 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
基于Pytorch SSD模型分析
Feb 18 Python
python微信公众号开发简单流程实现
Mar 09 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
pytorch实现Tensor变量之间的转换
Feb 17 #Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 #Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 #Python
python识别验证码图片实例详解
Feb 17 #Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 #Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 #Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 #Python
You might like
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
浅谈React之状态(State)
2018/09/19 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
师范生个人推荐信
2013/11/29 职场文书
小学亲子活动总结
2014/07/01 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书