PyTorch中Tensor的数据统计示例
作者:Steven·简谈 发布时间:2021-03-05 01:04:53
张量范数: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 比较整个张量
来源:https://blog.csdn.net/weixin_44613063/article/details/89741228
猜你喜欢
- ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件MicrosoftOLEDBProvid
- 目录图像边框的实现图像边框设计的主要函数图像混合的实现图像混合实现的主要函数主要思路图像边框的实现图像边框设计的主要函数cv.copyMak
- 先看看结果吧,去bilibili上拿到的图片=-=第一步,导入模块import requestsfrom bs4 import Beauti
- 今天填一个坑,俄罗斯方块!!俄罗斯方块的移动不难实现,但是旋转就不太容易实现,究其原因是因为Python中没有数组这种数据结构,所以不能用矩
- 实际开发过程中,我们经常会被各种宽度,高度计算搞晕。尤其是使用了rem的计算方式,自适应布局难倒一大片程序员。为了解决这类问题,我觉得可以利
- 最近写了个python抓取必应搜索首页http://cn.bing.com/的背景图片并将此图片更换为我的电脑桌面的程序,在正则匹配图片ur
- 本文实例为大家分享了Golang实现文件传输的具体代码,供大家参考,具体内容如下借助TCP完成文件的传输,基本思路如下:1、发送方(客户端)
- 前言:在网络时代,图片已经成为了我们生活中不可或缺的一部分。随着各种社交媒体的兴起,我们可以在网上看到越来越多的图片,但是如何从这些图片中获
- 在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这 5 个技巧非常实用。字符串运算字符串本质上也是一种元组
- 本文介绍了在js和asp中使用FileSystemObject(fso)来: 创建、添加或删除数据,以及读取文件; 移动、复制和删除文件;创
- 本文实例讲述了Python编程之变量赋值操作。分享给大家供大家参考,具体如下:#coding=utf8''''
- PHP quotemeta() 函数实例在预定义的字符前添加反斜杠:<?php$str = "Hello world. (c
- 程序开始:<% Server.ScriptTimeout = &HE10 '&
- 训练的时候内存一直在增加,最后内存爆满,被迫中断。后来换了一个电脑发现还是这样,考虑是代码的问题。检查才发现我的代码两次存了loss,只有一
- 1 模型定义和TF很像,Pytorch也通过继承父类来搭建模型,同样也是实现两个方法。在TF中是__init__()和
- 问题:我想每日从数据库里导出一些数据,内容基本上都是一样的,只是时间不同,比如导出一张表wjzcreate table wjz(id int
- 一、牛顿多项式拉格朗日多项式的公式不具备递推性,每个多项式需要单独构造。但很多时候我们需要从若干个逼近多项式选择一个。这个时候我们就需要一个
- 本文实例讲述了PHP实现的杨辉三角求解算法。分享给大家供大家参考,具体如下:♥ 前言对于 杨辉三角 是什么的问题,请参考百度百科的详细解释:
- 滚动回归所谓滚动回归,通常用在时间序列上。记当前时刻为 t,回归时长为 s,则一直使用 当作自变量来预测 。使用滚动回归的目的通常是为了避免
- 在以前的日志中讲了怎么制作验证码,这篇就讲讲怎么给验证码加上起干扰效果的杂点。 其实很简单,首先做一个