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中操作列表之List.append()方法的使用
May 20 Python
python中管道用法入门实例
Jun 04 Python
Python分支结构(switch)操作简介
Jan 17 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
django创建超级用户过程解析
Sep 18 Python
python微信公众号开发简单流程实现
Mar 09 Python
对python中arange()和linspace()的区别说明
May 03 Python
Django 如何实现文件上传下载
Apr 08 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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
如何在PHP中进行身份认证
2006/10/09 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
js判断是否是手机页面
2017/03/17 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
python删除特定文件的方法
2015/07/30 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
抽象类和接口的区别
2012/09/19 面试题
医药营销个人求职信范文
2014/02/07 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
技术员岗位职责
2015/02/04 职场文书
护士年终个人总结
2015/02/13 职场文书
安全生产会议制度
2015/08/06 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
基于Redission的分布式锁实战
2022/08/14 Redis