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中urllib2模块的8个使用细节分享
Jan 01 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
python3.5使用tkinter制作记事本
Jun 20 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python读取文件名称生成list的方法
Apr 27 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python使用matplotlib画饼状图
Sep 25 Python
利用Python检测URL状态
Jul 31 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
Python采集壁纸并实现炫轮播
Apr 30 Python
Python 文字识别
May 11 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
php 远程关机操作的代码
2008/12/05 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP中的session安全吗?
2016/01/22 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
javascript截取字符串小结
2015/04/28 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
微信小程序云开发之新手环境配置
2019/05/16 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
详细分析Python垃圾回收机制
2020/07/01 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
python实现银行账户系统
2021/02/22 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
洗发水广告词
2014/03/13 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
2015年入党决心书
2015/02/05 职场文书
起诉书范文
2015/05/20 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
python3 字符串str和bytes相互转换
2022/03/23 Python