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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
Python continue语句用法实例
Mar 11 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
python处理大日志文件
Jul 23 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
python生成特定分布数的实例
Dec 05 Python
tensorflow 查看梯度方式
Feb 04 Python
在Python中实现字典反转案例
Dec 05 Python
tensorflow中的数据类型dtype用法说明
May 26 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--用万网的接口实现域名查询功能
2012/12/13 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
深入探讨前端框架react
2015/12/09 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
python搜索算法原理及实例讲解
2020/11/18 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
领导党性分析材料
2014/02/15 职场文书
严以用权学习心得体会
2016/01/12 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python