Pytorch之扩充tensor的操作


Posted in Python onMarch 04, 2021

我就废话不多说了,大家还是直接看代码吧~

b = torch.zeros((3, 2, 6, 6))
a = torch.zeros((3, 2, 1, 1))
a.expand_as(b).size()
Out[32]: torch.Size([3, 2, 6, 6])
a = torch.zeros((3, 2, 2, 1))
a.expand_as(b).size()
Traceback (most recent call last):
 File "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
  exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-34-972575f79e92>", line 1, in <module>
  a.expand_as(b).size()
RuntimeError: The expanded size of the tensor (6) must match the existing size (2) at non-singleton dimension 2. Target sizes: [3, 2, 6, 6]. Tensor sizes: [3, 2, 2, 1]
a = torch.zeros((3, 2, 1, 2))
a.expand_as(b).size()
Traceback (most recent call last):
 File "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
  exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-36-972575f79e92>", line 1, in <module>
  a.expand_as(b).size()
RuntimeError: The expanded size of the tensor (6) must match the existing size (2) at non-singleton dimension 3. Target sizes: [3, 2, 6, 6]. Tensor sizes: [3, 2, 1, 2]
a = torch.zeros((3, 2, 2, 2))
a.expand_as(b).size()
Traceback (most recent call last):
 File "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
  exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-38-972575f79e92>", line 1, in <module>
  a.expand_as(b).size()
RuntimeError: The expanded size of the tensor (6) must match the existing size (2) at non-singleton dimension 3. Target sizes: [3, 2, 6, 6]. Tensor sizes: [3, 2, 2, 2]
a = torch.zeros((3, 2, 6, 2))
a.expand_as(b).size()
Traceback (most recent call last):
 File "/home/lart/.conda/envs/pt/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
  exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-40-972575f79e92>", line 1, in <module>
  a.expand_as(b).size()
RuntimeError: The expanded size of the tensor (6) must match the existing size (2) at non-singleton dimension 3. Target sizes: [3, 2, 6, 6]. Tensor sizes: [3, 2, 6, 2]
a = torch.zeros((3, 2, 6, 1))
a.expand_as(b).size()
Out[44]: torch.Size([3, 2, 6, 6])
a = torch.zeros((3, 2, 1, 6))
a.expand_as(b).size()
Out[46]: torch.Size([3, 2, 6, 6])

tensor.expand_as在这里用于扩展tensor到目标形状,常用的多是在H和W方向上的扩展。

假设目标形状为N, C, H, W,则要求tensor.size()=n, c, h, w(这里假设N,C不变):

1、h=w=1

2、h=1, w!=1

3、h!=1, w=1

补充:tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度

在利用tensorflow进行文本挖掘工作的时候,经常涉及到维度扩展和压缩工作。

比如对文本进行embedding操作完成之后,若要进行卷积操作,就需要对embedded的向量扩展维度,将[batch_size, embedding_dims]扩展成为[batch_size, embedding_dims, 1],利用tf.expand_dims(input, -1)就可实现,反过来用squeeze(input, -1)或者tf.squeeze(input)也可以把最第三维去掉。

tf.expand_dims()

tf.squeeze()

tf.expand_dims()

tf.expand_dims(input, axis=None, name=None, dim=None)

在第axis位置增加一个维度.

给定张量输入,此操作在输入形状的维度索引轴处插入1的尺寸。 尺寸索引轴从零开始; 如果您指定轴的负数,则从最后向后计数。

如果要将批量维度添加到单个元素,则此操作非常有用。 例如,如果您有一个单一的形状[height,width,channels],您可以使用expand_dims(image,0)使其成为1个图像,这将使形状[1,高度,宽度,通道]。

例子

# 't' is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]
# 't2' is a tensor of shape [2, 3, 5]
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]

tf.squeeze()

tf.squeeze(input, axis=None, name=None, squeeze_dims=None)

直接上例子

# 't' is a tensor of shape [1, 2, 1, 3, 1, 1]
 shape(squeeze(t)) ==> [2, 3]
# 't' is a tensor of shape [1, 2, 1, 3, 1, 1]
 shape(squeeze(t, [2, 4])) ==> [1, 2, 3, 1]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python条件和循环的使用方法
Nov 01 Python
python计算N天之后日期的方法
Mar 31 Python
Python设计模式之抽象工厂模式
Aug 25 Python
python中redis的安装和使用
Dec 04 Python
python读取二进制mnist实例详解
May 31 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
elasticsearch python 查询的两种方法
Aug 04 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
Python魔术方法专题
Jun 19 Python
快速一键生成Python爬虫请求头
Mar 04 #Python
10个顶级Python实用库推荐
Mar 04 #Python
pytorch 把图片数据转化成tensor的操作
Mar 04 #Python
pytorch 计算Parameter和FLOP的操作
Mar 04 #Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 #Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 #Python
python 求两个向量的顺时针夹角操作
Mar 04 #Python
You might like
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php广告加载类用法实例
2014/09/23 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
Vue.js实战之组件的进阶
2017/04/04 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
JS实现放烟花效果
2020/03/10 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
商务日语毕业生自荐信
2013/11/23 职场文书
初中体育教学反思
2014/01/14 职场文书
会计自我鉴定
2014/02/04 职场文书
咖啡店创业计划书
2014/08/15 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
教师岗位说明书
2015/09/30 职场文书