PyTorch的torch.cat用法


Posted in Python onJune 28, 2020

1. 字面理解:

torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起。

2. 例子理解

>>> import torch
>>> A=torch.ones(2,3) #2x3的张量(矩阵)                   
>>> A
tensor([[ 1., 1., 1.],
    [ 1., 1., 1.]])
>>> B=2*torch.ones(4,3)#4x3的张量(矩阵)                  
>>> B
tensor([[ 2., 2., 2.],
    [ 2., 2., 2.],
    [ 2., 2., 2.],
    [ 2., 2., 2.]])
>>> C=torch.cat((A,B),0)#按维数0(行)拼接
>>> C
tensor([[ 1., 1., 1.],
     [ 1., 1., 1.],
     [ 2., 2., 2.],
     [ 2., 2., 2.],
     [ 2., 2., 2.],
     [ 2., 2., 2.]])
>>> C.size()
torch.Size([6, 3])
>>> D=2*torch.ones(2,4) #2x4的张量(矩阵)
>>> C=torch.cat((A,D),1)#按维数1(列)拼接
>>> C
tensor([[ 1., 1., 1., 2., 2., 2., 2.],
    [ 1., 1., 1., 2., 2., 2., 2.]])
>>> C.size()
torch.Size([2, 7])

上面给出了两个张量A和B,分别是2行3列,4行3列。即他们都是2维张量。因为只有两维,这样在用torch.cat拼接的时候就有两种拼接方式:按行拼接和按列拼接。即所谓的维数0和维数1.

C=torch.cat((A,B),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。此时需要注意:列数必须一致,即维数1数值要相同,这里都是3列,方能列对齐。拼接后的C的第0维是两个维数0数值和,即2+4=6.

C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。此时需要注意:行数必须一致,即维数0数值要相同,这里都是2行,方能行对齐。拼接后的C的第1维是两个维数1数值和,即3+4=7.

从2维例子可以看出,使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

3.实例

在深度学习处理图像时,常用的有3通道的RGB彩色图像及单通道的灰度图。张量size为cxhxw,即通道数x图像高度x图像宽度。在用torch.cat拼接两张图像时一般要求图像大小一致而通道数可不一致,即h和w同,c可不同。当然实际有3种拼接方式,另两种好像不常见。比如经典网络结构:U-Net

PyTorch的torch.cat用法

里面用到4次torch.cat,其中copy and crop操作就是通过torch.cat来实现的。可以看到通过上采样(up-conv 2x2)将原始图像h和w变为原来2倍,再和左边直接copy过来的同样h,w的图像拼接。这样做,可以有效利用原始结构信息。

4.总结

使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

补充知识:PyTorch的concat也就是torch.cat实例

我就废话不多说了,大家还是直接看代码吧~

import torch
a = torch.ones([1,2])
b = torch.ones([1,2])
torch.cat([a,b],1)
 1 1 1 1
[torch.FloatTensor of size 1x4]

以上这篇PyTorch的torch.cat用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
Python中使用不同编码读写txt文件详解
May 28 Python
Python lxml模块安装教程
Jun 02 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python实现宿舍管理系统
Nov 22 Python
Python如何急速下载第三方库详解
Nov 02 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
使用pytorch 筛选出一定范围的值
Jun 28 #Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 #Python
pytorch 常用函数 max ,eq说明
Jun 28 #Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 #Python
Python turtle库的画笔控制说明
Jun 28 #Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 #Python
python删除指定列或多列单个或多个内容实例
Jun 28 #Python
You might like
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
详谈PHP编码转换问题
2015/07/28 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
pjblog修改技巧汇总
2007/03/12 Javascript
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
Python实现图像几何变换
2015/07/06 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
Python创建自己的加密货币的示例
2021/03/01 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
美国在线购物频道:Shop LC
2019/04/21 全球购物
介绍一下Ruby的特点
2013/01/20 面试题
资深生产主管自我评价
2013/09/22 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
物业消防安全责任书
2014/07/23 职场文书
教师四风问题整改措施
2014/09/25 职场文书
新党员入党决心书
2015/09/22 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
mysql的Buffer Pool存储及原理
2022/04/02 MySQL