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 3.x 新特性及10大变化
Jun 12 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
python实现简单的文字识别
Nov 27 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python 自动批量打开网页的示例
Feb 21 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python取余运算符知识点详解
Jun 27 Python
python 魔法函数实例及解析
Sep 25 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 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
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
python技能之数据导出excel的实例代码
2017/08/11 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
python中正则表达式的使用方法
2018/02/25 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python命令行工具Click快速掌握
2019/07/04 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
django 实现简单的插入视频
2020/04/07 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Keras自定义IOU方式
2020/06/10 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
开业庆典邀请函
2014/01/08 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
学生违反校规检讨书
2014/10/28 职场文书
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python