专栏首页唐国梁Tommy01 笔记分享 : pytorch中max和nonzero使用

01 笔记分享 : pytorch中max和nonzero使用

第一部分:torch.max()

1. 官网链接

https://pytorch.org/docs/stable/generated/torch.max.html#torch.max

2. 解释+案例

2.1 torch.max(input) → Tensor

返回input中所有元素中的最大值

案例:

a = torch.randn(1, 3)

a

输出:

tensor([[ 0.0557, -0.7400, -0.8941]])

torch.max(a)

tensor(0.0557)

a.max()

tensor(0.0557)

2.2 torch.max(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)

返回一个namedtuple(values, indices), values是在指定dim下,input中每行的最大值;indices是最大值所在索引。

如果keepdim=True,output的size与input size保持一致(此种情况除外: input的维度为1,即dim=1)

如果keepdim=False,dim会被torch.squeeze缩小/压缩,导致output tensors的维度为1,少于input的维度。

案例1:

a = torch.randn(4,4 ) # 随机生成4行4列的数据

a

输出:

tensor([[ 1.1982, -0.2496, -0.3671, -1.2475], [-1.6641, 0.6409, 0.9440, -0.1829], [ 0.9641, -0.1747, -1.1281, 0.4016], [ 0.3706, 0.8722, -1.1174, -0.5317]])

torch.max(a, dim=0) # 横轴方向

输出:

torch.return_types.max( values=tensor([1.1982, 0.8722, 0.9440, 0.4016]), indices=tensor([0, 3, 1, 2]))

torch.max(a, dim=0, keepdim=True) # 横轴方向,keepdim=True

输出:

torch.return_types.max( values=tensor([[1.1982, 0.8722, 0.9440, 0.4016]]), indices=tensor([[0, 3, 1, 2]]))

torch.max(a, dim=1) # 纵轴方向

输出:

torch.return_types.max( values=tensor([1.1982, 0.9440, 0.9641, 0.8722]), indices=tensor([0, 2, 0, 1]))

torch.max(a, dim=1, keepdim=True) # 纵轴方向,keepdim=True

输出:

torch.return_types.max( values=tensor([[1.1982], [0.9440], [0.9641], [0.8722]]), indices=tensor([[0], [2], [0], [1]]))

第二部分:torch.nonzero()

1. 官网参考链接 :

https://pytorch.org/docs/stable/generated/torch.nonzero.html#torch-nonzero

2. 方法

torch.nonzero(input, *, out=None, as_tuple=False)

-> LongTensor or tuple of LongTensors

返回值: 默认返回一个2-D的tensor,包含非零值的索引。

官网解释:

torch.nonzero(..., as_tuple=False) (default) returns a 2-D tensor where each row is the index for a nonzero value.

torch.nonzero(..., as_tuple=True) returns a tuple of 1-D index tensors, allowing for advanced indexing, so x[x.nonzero(as_tuple=True)] gives all nonzero values of tensor x. Of the returned tuple, each index tensor contains nonzero indices for a certain dimension.

案例1:

torch.nonzero(torch.tensor([1,1,1,0,1]))

输出:

tensor([[0], [1], [2], [4]])

torch.nonzero(torch.tensor([1,1,1,0,1]), as_tuple=True) # 设置as_tuple

输出:

(tensor([0, 1, 2, 4]),)

案例2:

torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],

[0.0, 0.0, 0.4, 0.0],

[0.0, 0.0, 1.2, 0.0],

[0.0, 0.0, 0.0,-0.4]]))

输出:

tensor([[0, 0], [1, 2], [2, 2], [3, 3]])

torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],

[0.0, 0.0, 0.4, 0.0],

[0.0, 0.0, 1.2, 0.0],

[0.0, 0.0, 0.0,-0.4]]), as_tuple=True) # 设置as_tuple

# 返回值: 指定行索引,包含非零值

输出:

(tensor([0, 1, 2, 3]), tensor([0, 2, 2, 3]))

案例3:

t = torch.tensor([[0.6, 1.5, 2.3, 3.7],

[2.4, 0.0, 0.4, 1.8],

[5.1, 0.0, 1.2, 3.4],

[6.3, 4.8, 0.0,-0.4]])

t

输出:

tensor([[ 0.6000, 1.5000, 2.3000, 3.7000], [ 2.4000, 0.0000, 0.4000, 1.8000], [ 5.1000, 0.0000, 1.2000, 3.4000], [ 6.3000, 4.8000, 0.0000, -0.4000]])

t[:, 2:] > 0

输出:

tensor([[ True, True], [ True, True], [ True, True], [False, False]])

(t[:, 2:] > 0).nonzero(as_tuple=False)

# 返回一个2-D的tensor,包含非零值的索引

输出:

tensor([[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]])

(t[:, 2:] > 0).nonzero(as_tuple=False).T # 转置

输出:

tensor([[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])

i, j = (t[:, 2:] > 0).nonzero(as_tuple=False).T

输出:

i # 行索引

tensor([0, 0, 1, 1, 2, 2])

j # 列索引

tensor([0, 1, 0, 1, 0, 1])

本文分享自微信公众号 - 唐国梁Tommy(TangGuoLiangAI),作者:唐国梁Tommy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 笔记 | PyTorch安装及入门教程

    https://www.anaconda.com/products/individual

    计算机视觉联盟
  • 笔记分享 : 装饰器 Decorator 的理解和应用 - 01

    哈喽,大家好,今天我们来学习一下python中的decorator(装饰器)及其应用:

    唐国梁Tommy
  • 用Windows电脑训练深度学习模型?超详细配置教程来了

    本文将介绍在 Windows 计算机上配置深度学习环境的全过程,其中涉及安装所需的工具和驱动软件。出人意料的是,即便只是配置深度学习环境,任务也不轻松。你很有可...

    计算机视觉联盟
  • PyTorch简明笔记[1]-Tensor的初始化和基本操作

    安装PyTorch应该不用我多说,他们的官网很人性化地给出了各种环境应该怎么安装,网址:https://pytorch.org/get-started/loca...

    beyondGuo
  • 用Windows电脑训练深度学习模型?超详细配置教程来了

    本文将介绍在 Windows 计算机上配置深度学习环境的全过程,其中涉及安装所需的工具和驱动软件。出人意料的是,即便只是配置深度学习环境,任务也不轻松。你很有可...

    机器之心
  • 用Windows电脑训练深度学习模型?超详细配置教程来了

    本文将介绍在 Windows 计算机上配置深度学习环境的全过程,其中涉及安装所需的工具和驱动软件。出人意料的是,即便只是配置深度学习环境,任务也不轻松。你很有可...

    代码医生工作室
  • 用PyTorch做物体检测和追踪

    在我之前的工作中,我尝试过用自己的图像在PyTorch中训练一个图像分类器,然后用它来进行图像识别。现在,我将向你们展示如何使用预训练的分类器在一张图像中检测多...

    AI研习社
  • SDL2和OpenGL使用踩坑笔记经验分享

    LFTK 是一个嵌入式GUI,为了开发方便,需要提供PC运行环境。我选择了SDL2+OpenGL+nanovg来实现底层的渲染,让LFTK可以运行在各个平台上。...

    砸漏
  • 生信技巧第二课-使用markdown记录和分享笔记

    生信技能树
  • 【深度学习】PyTorch 数据集随机值的完美实践

    来源 | https://zhuanlan.zhihu.com/p/377155682 编辑 | 极市平台 本文仅作学术交流,版权归原作者所有,如有侵权请联系删...

    黄博的机器学习圈子
  • PyTorch 进阶之路(四):在 GPU 上训练深度神经网络

    在之前的教程中,我们基于 MNIST 数据集训练了一个识别手写数字的 logistic 回归模型,并且达到了约 86% 的准确度。

    机器之心
  • C++ OpenCV三种图像卡通化方法对比

    最近想学习一下深度学习框架,由于是小白,所以先搜集了一下由哪个入门,最终选择了Pytorch,以前一直不想碰还有一个原因是笔记本资源有限,加上个人的业余时间有限...

    Vaccae
  • PyTorch进阶之路(一):张量与梯度

    本系列教程旨在让用户更好地利用 PyTorch 学习深度学习和神经网络。本文将介绍 PyTorch 模型的基本构件:张量和梯度。

    机器之心
  • 这些SQL技能你都会吗? 经典SQL面试题送给你(附答案)

    首先熟悉一下数据库相关专业名词, 比如DB、 DBMS和SQL,这些概念常常让人傻傻分不清楚。

    CDA数据分析师
  • NeuralProphet:基于神经网络的时间序列建模库

    NeuralProphet是一个python库,用于基于神经网络对时间序列数据进行建模。它建立在PyTorch之上,并受到Facebook Prophet和AR...

    deephub
  • 机器人实践课程镜像分享及使用说明(Arduino+ROS1+ROS2+Gazebo+SLAM+...)

    经过5年尝试和努力,在吸取indigo、kinetic版本经验后,融合Arduino、ROS1、ROS2、Gazebo和SLAM的适用机器人爱好者的实践课程镜像...

    zhangrelay
  • 基于Pytorch的从零开始的目标检测 | 附源码

    目标检测是计算机视觉中一个非常流行的任务,在这个任务中,给定一个图像,你预测图像中物体的包围盒(通常是矩形的) ,并且识别物体的类型。在这个图像中可能有多个对象...

    小白学视觉
  • Github近期最有趣的10款机器学习开源项目

    ? 来源:PaperWeekly 本文共900字,建议阅读6分钟。 本文为你罗列近期Github上十大有趣的机器学习开源项目。 -01- Face Rec...

    数据派THU
  • Github近期最有趣的10款机器学习开源项目

    来源:PaperWeekly 本文共900字,建议阅读6分钟。 本文为你罗列近期Github上十大有趣的机器学习开源项目。 -01- Face Recognit...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券