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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
python处理文本文件并生成指定格式的文件
Jul 31 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
Python下载指定页面上图片的方法
May 12 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
python如何编写win程序
Jun 08 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
javascript每日必学之继承
2016/02/23 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python实现读取json文件到excel表
2017/11/18 Python
python opencv之SIFT算法示例
2018/02/24 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
上海期货面试题
2014/01/31 面试题
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
音乐专业应届生教师求职信
2013/11/04 职场文书
高二历史教学反思
2014/01/25 职场文书
食品流通安全承诺书
2014/05/22 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
优秀教师推荐材料
2014/12/16 职场文书
后备干部推荐材料
2014/12/24 职场文书