Pytorch中的5个非常有用的张量操作
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文转自:AI公园
导读
虽然也有其他方式可以实现相同的效果,但是这几个操作可以让使用更加方便。
PyTorch是一个基于Python的科学包,用于使用一种称为张量的特殊数据类型执行高级操作。张量是具有规则形状和相同数据类型的数字、向量、矩阵或多维数组。PyTorch是NumPy包的另一种选择,它可以在GPU下使用。它也被用作进行深度学习研究的框架。
这5个操作是:
expand()
permute()
tolist()
narrow()
where()
1. expand()
将现有张量沿着值为1的维度扩展到新的维度。张量可以同时沿着任意一维或多维展开。如果你不想沿着一个特定的维度展开张量,你可以设置它的参数值为-1。
注意:只能扩展单个维度
# Example 1 - working
a=torch.tensor([[[1,2,3],[4,5,6]]])
a.size()
>>torch.Size([1, 2, 3])a.expand(2,2,3)
>>tensor([[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6]]])
在这个例子中,张量的原始维数是[1,2,3]。它被扩展到[2,2,3]。
2. permute()
这个函数返回一个张量的视图,原始张量的维数根据我们的选择而改变。例如,如果原来的维数是[1,2,3],我们可以将它改为[3,2,1]。该函数以所需的维数顺序作为参数。
# Example 1 - working
a=torch.tensor([[[1,2,3],[4,5,6]]])
a.size()
>>torch.Size([1, 2, 3])a.permute(2,1,0).size()
>>torch.Size([3, 2, 1])a.permute(2,1,0)
>>tensor([[[1],[4]],[[2],[5]],[[3],[6]]])
在这个例子中,原始张量的维度是[1,2,3]。使用permuting,我将顺序设置为(2,1,0),这意味着新的维度应该是[3,2,1]。如图所示,张量的新视图重新排列了数字,使得张量的维度为[3,2,1]。
当我们想要对不同维数的张量进行重新排序,或者用不同阶数的矩阵进行矩阵乘法时,可以使用这个函数。
3. tolist()
这个函数以Python数字、列表或嵌套列表的形式返回张量。在此之后,我们可以对它执行任何python逻辑和操作。
# Example 1 - working
a=torch.tensor([[1,2,3],[4,5,6]])
a.tolist()
>> [[1, 2, 3], [4, 5, 6]]
在这个例子中,张量以嵌套列表的形式返回。
4. narrow()
这个函数返回一个新的张量,这个张量是原来张量的缩小版。这个函数的参数是输入张量、要缩小的维数、起始索引和新张量沿该维数的长度。它返回从索引start到索引(start+length-1)中的元素。
# Example 1 - working
a=torch.tensor([[1,2,3,4],[5,6,7,8],[9,10,11,12],[14,15,16,17]])
torch.narrow(a,1,2,2)
>> tensor([[ 3, 4],[ 7, 8],[11, 12],[16, 17]])
在这个例子中,张量要沿着第2维,也就是最里面的维度缩小。它接受列表中的元素,从索引2开始,到索引3(=2+2 -1,即start+length-1)。
Narrow()的工作原理类似于高级索引。例如,在一个2D张量中,使用[:,0:5]选择列0到5中的所有行。同样的,可以使用torch.narrow(1,0,5)。然而,在高维张量中,对于每个维度都使用range操作是很麻烦的。使用narrow()可以更快更方便地实现这一点。
5. where()
这个函数返回一个新的张量,其值在每个索引处都根据给定条件改变。这个函数的参数有:条件,第一个张量和第二个张量。在每个张量的值上检查条件(在条件中使用),如果为真,就用第一个张量中相同位置的值代替,如果为假,就用第二个张量中相同位置的值代替。
# Example 1 - working
a=torch.tensor([[[1,2,3],[4,5,6]]]).to(torch.float32)
b=torch.zeros(1,2,3)
torch.where(a%2==0,b,a)
>>tensor([[[1., 0., 3.],[0., 5., 0.]]])
这里,它检查张量a的值是否是偶数。如果是,则用张量b中的值替换,b中的值都是0,否则还是和原来一样。
此函数可用于设定阈值。如果张量中的值大于或小于某一数值,它们可以很容易地被替换。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
Pytorch中的5个非常有用的张量操作相关推荐
- Pytorch 中的 5 个非常有用的张量操作
作者 | Samyukta Nair 编译 | ronghuaiyang 转自 | AI公园 导读 虽然也有其他方式可以实现相同的效果,但是这几个操作可以让使用更加方便. PyTorch是一个基于Py ...
- 挑选出tensor中等于0的索引_Pytorch中的5个非常有用的张量操作
作者:Samyukta Nair 编译:ronghuaiyang 导读 虽然也有其他方式可以实现相同的效果,但是这几个操作可以让使用更加方便. PyTorch是一个基于Python的科学包,用于使用一 ...
- pytorch中的expand()和expand_as()函数--扩展张量中某维数据的尺寸
pytorch中的expand()和expand_as()函数 1.expand()函数: (1)函数功能: expand()函数的功能是用来扩展张量中某维数据的尺寸,它返回输入张量在某维扩展为更大尺 ...
- 实践教程 | 浅谈 PyTorch 中的 tensor 及使用
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | xiaopl@知乎(已授权) 来源 | https://z ...
- 损失函数-负对数似然和交叉熵(Pytorch中的应用)
文章目录 1.负对数似然损失函数 1.1.似然 1.2.似然函数 1.3.极大似然估计 1.4.对数似然 1.5.负对数似然 1.6.pytorch中的应用 2.交叉熵损失函数 2.1.信息量 2.2 ...
- pytorch中Parameter()介绍
用法介绍 pytorch中的Parameter函数可以对某个张量进行参数化.它可以将不可训练的张量转化为可训练的参数类型,同时将转化后的张量绑定到模型可训练参数的列表中,当更新模型的参数时一并将其更 ...
- 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
作者 | Comet 译者 | 天道酬勤,责编 | Carol 出品 | AI 科技大本营(ID:rgznai100) 这篇文章是由AssemblyAI的机器学习研究工程师Michael Nguyen ...
- 实践指南 | 用PyTea检测 PyTorch 中的张量形状错误
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨陈萍.泽南 来源丨机器之心 编辑丨极市平台 导读 韩国首尔大学 ...
- 在PyTorch中进行双线性采样:原理和代码详解
↑ 点击蓝字 关注视学算法 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/257958558 编辑丨极市平台 在pytorch中的双线性采样(Bilinear Sa ...
最新文章
- 智能车竞赛技术报告 | 智能车视觉 - 温州大学- 春华秋实
- java 对象多属性排序_java list按照元素对象的指定多个字段属性进行排序
- 【MySql】mysql-5.7.20-winx64安装配置
- mupdf-android-viewer 设计与实现浅析
- MySQL备份与恢复————用LVM快照恢复
- Unity脚本各种[XXX]的用法
- 宿舍电源额定500w,我的电脑550w的,有什么办法能解决吗?
- Win10 WSL编译Android开启ccache(提高编译速度)
- 【数据结构与算法-动态规划系列经典例题汇总】
- SPOJ 28270 BIPCSMR16 - Team Building(水~)
- 「镁客·请讲」艾拉比芮亚楠:当OTA普及,我们将在物联网和车联网看到三个变化...
- linux下木马程序病原体的制作和运行
- Kali对网站进行DDOS攻击
- APP测试点分析与总结
- 一个基于angularJS的工资计算器
- canvas画三角形
- Android电池信息(Battery information)
- 【教程】Ubuntu安装、使用gephi
- CAD中插入外部参照字体会变繁体_为什么CAD插入外部参照时会提示错误无效?
- Linux安装jdk,mysql,tomcat,redis和nginx
热门文章
- 为什么Rust连续4年获“最受喜爱编程语言”?
- 算力觉醒后,智慧距离勃发就只差一个想法
- 仅用语音,AI就能“脑补”你的脸! | 技术头条
- Windows 7时代即将终结!
- 一周焦点 | 最强AI芯片麒麟980发布;前端开发者将被取代?
- AI实验室•西安站 教你用人脸识别打造爆款应用
- 资源 |“从蒙圈到入坑”,推荐新一波ML、DL、RL以及数学基础等干货资源
- 为什么RedisCluster会设计成16384个槽呢?
- 谈谈几个 Spring Cloud 常见面试题及答案
- 王敏捷 - 深度学习框架这十年!