≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > Python

python之Pytorch torch.cat与torch.stack的区别

人气:353 时间:2021-06-02

这篇文章主要为大家详细介绍了python之Pytorch torch.cat与torch.stack的区别,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的雯雯来看看吧!

torch.cat()函数可以将多个张量拼接成一个张量。torch.cat()有两个参数,第一个是要拼接的张量的列表或是元组;第二个参数是拼接的维度。

补充:torch.stack()的官方解释,详解以及例子

可以直接看最下面的【3.例子】,再回头看前面的解释

在pytorch中,常见的拼接函数主要是两个,分别是:

1、stack()

2、cat()

实际使用中,这两个函数互相辅助:关于cat()参考torch.cat(),但是本文主要说stack()。

函数的意义:使用stack可以保留两个信息:[1. 序列] 和 [2. 张量矩阵] 信息,属于【扩张再拼接】的函数。

形象的理解:假如数据都是二维矩阵(平面),它可以把这些一个个平面(矩阵)按第三维(例如:时间序列)压成一个三维的立方体,而立方体的长度就是时间序列长度。

该函数常出现在自然语言处理(NLP)和图像卷积神经网络(CV)中。

1. stack()

官方解释:沿着一个新维度对输入张量序列进行连接。 序列中所有的张量都应该为相同形状。

浅显说法:把多个2维的张量凑成一个3维的张量;多个3维的凑成一个4维的张量…以此类推,也就是在增加新的维度进行堆叠。

代码如下:


outputs = torch.stack(inputs, dim=?) → Tensor

聊聊Pytorch torch.cat与torch.stack的区别

参数

inputs : 待连接的张量序列。

注:python的序列数据只有list和tuple。

dim : 新的维度, 必须在0到len(outputs)之间。

注:len(outputs)是生成数据的维度大小,也就是outputs的维度值。

2. 重点

函数中的输入inputs只允许是序列;且序列内部的张量元素,必须shape相等

----举例:[tensor_1, tensor_2,..]或者(tensor_1, tensor_2,..),且必须tensor_1.shape == tensor_2.shape

dim是选择生成的维度,必须满足0<=dim<len(outputs);len(outputs)是输出后的tensor的维度大小

不懂的看例子,再回过头看就懂了。

3. 例子

1.准备2个tensor数据,每个的shape都是[3,3]

代码如下:


# 假设是时间步T1的输出
T1 = torch.tensor([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])
# 假设是时间步T2的输出
T2 = torch.tensor([[10, 20, 30],
          [40, 50, 60],
          [70, 80, 90]])

聊聊Pytorch torch.cat与torch.stack的区别

2.测试stack函数

代码如下:


print(torch.stack((T1,T2),dim=0).shape)
print(torch.stack((T1,T2),dim=1).shape)
print(torch.stack((T1,T2),dim=2).shape)
print(torch.stack((T1,T2),dim=3).shape)
# outputs:
torch.Size([2, 3, 3])
torch.Size([3, 2, 3])
torch.Size([3, 3, 2])
'选择的dim>len(outputs),所以报错'
IndexError: Dimension out of range (expected to be in range of [-3, 2], but got 3)

聊聊Pytorch torch.cat与torch.stack的区别

可以复制代码运行试试:拼接后的tensor形状,会根据不同的dim发生变化。

dim shape
0 [2, 3, 3]
1 [3, 2, 3]
2 [3, 3, 2]
3 溢出报错

4. 总结

1、函数作用:

函数stack()对序列数据内部的张量进行扩维拼接,指定维度由程序员选择、大小是生成后数据的维度区间。

2、存在意义:

在自然语言处理和卷及神经网络中, 通常为了保留–[序列(先后)信息] 和 [张量的矩阵信息] 才会使用stack。

函数存在意义?》》》

手写过RNN的同学,知道在循环神经网络中输出数据是:一个list,该列表插入了seq_len个形状是[batch_size, output_size]的tensor,不利于计算,需要使用stack进行拼接,保留–[1.seq_len这个时间步]和–[2.张量属性[batch_size, output_size]]。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持四海网。

本文来自:http://www.q1010.com/181/18574-0.html

注:关于python之Pytorch torch.cat与torch.stack的区别的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:python

您可能感兴趣的文章

  • 解决python3安装pandas出错的问题
  • python之线程池模块之多线程操作的简单示例
  • Python自动扫描出微信不是好友名单的简单示例
  • python之pytorch查看数据类型和大小的简单示例
  • python之pytorch中[..., 0]的用法说明
  • python之数据分析pandas比较操作的简单示例
  • python之pytorch中stack和cat的及to_tensor的坑的深入分析
  • python自动化之定位方法大杀器xpath的介绍
  • python之pytorch手写数字图片识别的实现方法
  • python之pytorch中的squeeze函数、cat函数用法示例
上一篇:python之在list中找Topk的数值和索引的简单示例
下一篇:解决python3安装pandas出错的问题
热门文章
  • Python 处理Cookie的菜鸟教程(一)Cookie库
  • python之pandas取dataframe特定行列的简单示例
  • Python解决json.dumps错误::‘utf8’ codec can‘t decode byte
  • Python通过pythony连接Hive执行Hql的脚本
  • Python 三种方法删除列表中重复元素的简单示例
  • python爬虫代码示例
  • Python 中英文标点转换示例
  • Python 不得不知的开源项目解析
  • Python urlencode编码和url拼接实现方法
  • python按中文拆分中英文混合字符串的简单示例
  • 最新文章
    • Python利用numpy三层神经网络的简单示例
    • pygame可视化幸运大转盘的简单示例
    • Python爬虫之爬取二手房信息的简单示例
    • Python之time库的简单示例
    • OpenCV灰度、高斯模糊、边缘检测的简单示例
    • Python安装Bs4及使用的简单示例
    • django自定义manage.py管理命令的简单示例
    • Python之matplotlib 向任意位置添加一个子图(axes)的简单示例
    • Python图像标签标注软件labelme分析的简单示例
    • python调用摄像头并拍照发邮箱的简单示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。