目录

1. 降维torch.squeeze(input, dim=None, out=None)

简单示例

matplotlib画图示例

2.增维 torch.unsqueeze(input, dim, out=None)

简单示例

3.参考


1. 降维torch.squeeze(input, dim=None, out=None)

函数功能:去除size为1的维度,包括行和列。当维度大于等于2时,squeeze()无作用。

  • 当给定dim时,那么挤压操作只在给定维度上。即若tensor.size(dim) = 1,则去掉该维度

    • 其中squeeze(0)代表若第一维度值为1则去除第一维度
    • squeeze(1)代表若第二维度值为1则去除第二维度
    • -1,去除最后维度值为1的维度
  • 当不给定dim时,将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D)(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)(A×B×C×D)

例如,输入形状为: (A×1×B)(A×1×B), squeeze(input, 0) 将会保持张量不变,只有用 squeeze(input, 1),形状会变成 (A×B)(A×B)。

注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。

参数:

  • input (Tensor) – 输入张量
  • dim (int, optional) – 如果给定,则input只会在给定维度挤压,维度的索引(从0开始)
  • out (Tensor, optional) – 输出张量

简单示例

a = torch.Tensor(1,3)
>>
tensor([[-1.37,4.56,-3.57]])print a.squeeze(0) #第一个维度大小确实是1,所以可以去除
>>
tensor([-1.37,4.56,-3.57])print a.squeeze(1) ##第二个维度大小是3,所以不能去除
>>
tensor([[-1.37,4.56,-3.57]])#例子2
b = torch.Tensor(2,3)
print b
>>
tensor([[-3.17,3.09,1.43],
[0.00,0.00,0.00]])print b.squeeze(0)##第一个维度大小不是1,所以不能去除
>>
tensor([[-3.17,3.09,1.43],
[0.00,0.00,0.00]])print b.squeeze(1) ##第二个维度大小是3,所以不能去除
>>
tensor([[-3.17,3.09,1.43],
[0.00,0.00,0.00]])#例子3
c = torch.Tensor(3,1)
print c
>>
tensor([[-3.54],
[3.09],
[0.00]])print c.squeeze(0)##第一个维度大小不是1,所以不能去除
>>
tensor([[-3.54],
[3.09],
[0.00]])print c.squeeze(1)#第二个维度大小确实是1,所以可以去除
>>
tensor([-3.54,3.09,0.00])

matplotlib画图示例

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
#无法正常显示图示案例
squares =np.array([[1,4,9,16,25]])
squares.shape       #要显示的数组为可表示1行5列的向量的数组
(1, 5)
plt.plot(squares)
plt.show()

#正常显示图示案例
#通过np.squeeze()函数转换后,要显示的数组变成了秩为1的数组,即(5,)
plt.plot(np.squeeze(squares))
plt.show()

np.squeeze(squares).shape
(5,)

2.增维 torch.unsqueeze(input, dim, out=None)

增加大小为1的维度,也就是返回一个新的张量,对输入的指定位置插入维度 1且必须指明维度

  • x = torch.unsqueeze(x, 3) # 在第3个维度上扩展

注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。

如果dim为负,则将会被转化dim+input.dim()+1,例如对于一个(3,2,4)的tensor,其dim可以选择为none,-1,0,1,2

  • none:所有元素的max,得到一个max值
  • -1:若dim为负,则将被转化为dim+input.dim()+1,即2
    • -1+2+1
  • 0:最粗粒度的方向,在第1维插入一个维度
  • 1:在第2维插入一个维度
  • 2:最细粒度的方向,在第3维插入一个维度
  • -3:在倒数第3维插入一个维度,在本例子也就是第一维
  • 一句话概括:dim越大,越深入,none即所有最小元素参与计算。

参数:

  • tensor (Tensor) – 输入张量
  • dim (int) – 插入维度的索引(从0开始)
  • out (Tensor, optional) – 结果张量

简单示例

import torchx = torch.ones(4)
print(x)
print(x.size())y = torch.unsqueeze(x, 0)
print(y)
print(y.size())z = torch.unsqueeze(x, 1)
print(z)
print(z.size())

结果

tensor([1., 1., 1., 1.])
torch.Size([4])
tensor([[1., 1., 1., 1.]])
torch.Size([1, 4])
tensor([[1.],[1.],[1.],[1.]])
torch.Size([4, 1])

分析

插入维度之前:

[ 1, 1, 1, 1 ]

在第0维插入一个维度,使其变成(1,4),即在最外层插入一个中括号即可:

[ [ 1, 1, 1, 1 ] ]

在第1维插入一个维度,使其变成(4,1)

[ [1], [1], [1], [1] ]

3.参考

pytorch中对维度及其squeeze()、unsqueeze()函数的理解

torch.squeeze()和unsqueeze()

Numpy库学习—squeeze()函数

Python-squeeze()、unsqueeze()函数的理解相关推荐

  1. pytorch函数unsqueeze函数的理解

    在看许多pytorch的代码时,为了计算上的方便,通常会用到unsqueeze函数,一直不得要领,这次专门去做个实验学习一下. 官方文档对这个函数描述如下,就是在指定的位置插入一个维度,有两个参数,i ...

  2. 对于Python中回调函数的理解

    关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...

  3. python在工厂中的应用_什么是工厂函数?Python 中工厂函数怎么理解?

    其实谈工厂函数前必须首先把嵌套作用域和闭包讲清楚 python有一个很有意思的地方,就是def函数可以嵌套在另一个def函数之中.调用外层函数时,运行到的内层def语句仅仅是完成对内层函数的定义,而不 ...

  4. python的format函数如何理解_python format函数的使用

    转载自:http://www.cnblogs.com/kaituorensheng/p/5709970.html python自2.6后,新增了一种格式化字符串函数str.format(),威力十足, ...

  5. python中 map函数 的使用

    1. 概念 map函数也是python中的一个内置函数,用法同之前讲过的filter函数类似.map在这里的意思是映射的意思,会根据提供的函数对指定序列做映射. map函数会返回一个迭代器,如果要转换 ...

  6. python中squeeze函数_详解pytorch中squeeze()和unsqueeze()函数介绍

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  7. pytorch 中 squeeze 和unsqueeze函数

    1. torch.squeeze() 函数 : 作用:移除指定或所有维数为1的维度,从而得到维度减少的张量 解释一下: x=torch.zeros(5,1,1,1)print(x)'输出' tenso ...

  8. python对初学者的看法_python学习之道(1)——新手小白对print()函数的理解,Python,之路,一,浅谈...

    Python学习之路(一) --浅谈新手小白对print()函数的理解 写在前面 笔者目前为在校大四学生(某末流211),大学生活即将画上终点,然而却还没有真正精通一门语言,很是惭愧.在大学期间参加了 ...

  9. Python squeeze()函数

    Python squeeze()函数 作用:移除数组中维度为1的维度 函数形式:numpy.``squeeze(a, axis=None) 参数:axis: 选择数组中的某一维度移除, 如果选择形状输 ...

最新文章

  1. Restful与webService区别
  2. OpenCV 图像旋转
  3. Vue指令篇_v-for_列表渲染
  4. 栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)
  5. springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
  6. 单行溢出文本显示省略号的方法(兼容IE FF)
  7. 发布HTML5 2D游戏引擎YEngine2D
  8. 浅读vue-router源码,了解vue-router基本原理
  9. java 枚举 扑克牌_Java入门第三季7-1简易扑克牌作业
  10. Phoenix Tips (8) 多租户
  11. VS编译器中QT版本问题不正确解决方法-Please assign a Qt installation in ‘Qt Project Settings‘.
  12. C语言回溯算法求幂集,回溯法与树的遍历 - 求幂集
  13. 双币对冲外汇ea ,单货币对冲策略, EA运行原理
  14. git 分支关系图谱讲解
  15. 如何实现一个惊艳女友的血轮眼轮回眼特效
  16. 范畴论-一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已
  17. s3c2410 2.6.22.1内核移植
  18. 南京大学比中科大计算机与科学专业,教育部直属:16所“软件工程”专业强校,浙大、南大、中科大上榜...
  19. 关于部分小米机型沉浸式图标变色失败的解决方式
  20. Couldn’t load custom C++ ops.

热门文章

  1. java数组比较的头文件_C语言和JAVA的区别
  2. Excel如何提取多条件不重复数据
  3. 图像混合模式 正片叠底、滤色、叠加
  4. Python特点及优势
  5. idea集成git合并分支_持续集成:合并故事
  6. 探究肺癌患者的CT图像的图像特征并构建一个诊断模型
  7. Macbook Pro 键盘触摸板失灵,只有电源键有反应 修复手札
  8. Linux 安装pip
  9. CSS常见的布局方式
  10. 实现微信小程序分享朋友圈及好友