应用场景:当我们进行深度学习使用Image函数导入图片时,默认它的维度为[C, H, W],此时根据模型的需要导入batch这一维度。
部分程序
# 导入要测试的图像(自己找的,不在数据集中),放在源文件目录下
im = Image.open('dog.jpg')
im = transform(im)  # [C, H, W]
im = torch.unsqueeze(im, dim=0)      # 对数据增加一个新维度(batch),因为tensor的参数是[batch, channel, height, width]

unsqueeze 指定哪个下标就增加那个下标长度为1的维度(必须加上下标,)。

squeeze 从中删除长度为1的维度。指定下标就删除那个下标长度为1的维度,若不为1则不删除。

具体详情见如下代码:

unsquenze(增加长度1的维度):

import torch
a = torch.arange(9,dtype=float).reshape((3,3))
print(a)
print(a.shape)        # 查看a的形状
a = a.unsqueeze(0)
print(a)              # 经过unsqueeze函数后的情况
print(a.shape)        # 维度变化情况# 结果输出
tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]], dtype=torch.float64)
torch.Size([3, 3])
tensor([[[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]]], dtype=torch.float64)
torch.Size([1, 3, 3])
import torch
a = torch.arange(9,dtype=float).reshape((3,3))
print(a)
print(a.shape)        # 查看a的形状
a = a.unsqueeze(1)    # 等同于a = a.unsqueeze(-2)
print(a)              # 经过unsqueeze函数后的情况
print(a.shape)        # 维度变化情况# 结果输出
tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]], dtype=torch.float64)
torch.Size([3, 3])
tensor([[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]], dtype=torch.float64)
torch.Size([3, 1, 3])​
import torch
a = torch.arange(9,dtype=float).reshape((3,3))
print(a)
print(a.shape)        # 查看a的形状
a = a.unsqueeze(2)    # 等同于a = a.unsqueeze(-1)
print(a)              # 经过unsqueeze函数后的情况
print(a.shape)        # 维度变化情况# 结果输出
tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]], dtype=torch.float64)
torch.Size([3, 3])
tensor([[[0.],[1.],[2.]],[[3.],[4.],[5.]],[[6.],[7.],[8.]]], dtype=torch.float64)
torch.Size([3, 3, 1])

squeeze(减少长度为1的维度):

import torch
a = torch.arange(9,dtype=float).reshape((1,3,1,3))
print(a)
print(a.shape)        # 查看s的形状
a = a.squeeze()       # 等同于a = a.unsqueeze(-1)
print(a)              # 经过squeeze函数后的情况
print(a.shape)        # 维度变化情况# 结果
tensor([[[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]]], dtype=torch.float64)
torch.Size([1, 3, 1, 3])
tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]], dtype=torch.float64)
torch.Size([3, 3])
import torch
a = torch.arange(9,dtype=float).reshape((1,3,1,3))
print(a)
print(a.shape)        # 查看s的形状
a = a.squeeze(0)      # 此时删除a的下标为0的维度长度为1
print(a)              # 经过squeeze函数后的情况
print(a.shape)        # 维度变化情况
tensor([[[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]]], dtype=torch.float64)
torch.Size([1, 3, 1, 3])
tensor([[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]], dtype=torch.float64)
torch.Size([3, 1, 3])
import torch
a = torch.arange(9,dtype=float).reshape((1,3,1,3))
print(a)
print(a.shape)        # 查看s的形状
a = a.squeeze(2)      # 此时删除a的下标为2的维度长度为1(等价于a = a.squeeze(-2))
print(a)              # 经过squeeze函数后的情况
print(a.shape)        # 维度变化情况# 结果
tensor([[[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]]], dtype=torch.float64)
torch.Size([1, 3, 1, 3])
tensor([[[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]]], dtype=torch.float64)
torch.Size([1, 3, 3])
import torch
a = torch.arange(9,dtype=float).reshape((1,3,1,3))
print(a)
print(a.shape)        # 查看s的形状
a = a.squeeze(1)      # 此时小标为1或3时,对应的维度长度均为3,所以squeeze没有起作用
print(a)              # 经过squeeze函数后的情况
print(a.shape)        # 维度变化情况# 结果
tensor([[[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]]], dtype=torch.float64)
torch.Size([1, 3, 1, 3])
tensor([[[[0., 1., 2.]],[[3., 4., 5.]],[[6., 7., 8.]]]], dtype=torch.float64)
torch.Size([1, 3, 1, 3])

pytorch中的squeeze和unsqueeze函数的使用相关推荐

  1. pytorch中的squeeze和unsqueeze的用法小结

    文章目录 1. 理论简介 2. 举例 2.1 squeeze (1)x.squeeze() (2)x.squeeze(n) (3)torch.squeeze(x) 2.2 unsqueeze (1)x ...

  2. PyTorch中的squeeze()和unsqueeze()详解与应用案例

    文章目录 1.torch.squeeze 2.torch.unsqueeze 3.给一个使用上述两个函数,并进行一次卷积的例子 附上官网地址: https://pytorch.org/docs/sta ...

  3. pytorch中的squeeze和unsqueeze

    squeeze:压缩,要减少维度. unsqueeze:解压缩,要增加维度. torch.squeeze(input),那么会把input中所有维度长度为1的维度去掉. torch.squeeze(i ...

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

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

  5. Pytorch中tensor.view().permute().contiguous()函数理解

    Pytorch中tensor.view().permute().contiguous()函数理解 yolov3中有一行这样的代码,在此记录一下三个函数的含义 # 例子中batch_size为整型,le ...

  6. 机器学习9:关于pytorch中的zero_grad()函数

    机器学习9:关于pytorch中的zero_grad()函数 本文参考了博客Pytorch 为什么每一轮batch需要设置optimizer.zero_grad. 1.zero_grad()函数的应用 ...

  7. 【学习笔记】pytorch中squeeze()和unsqueeze()函数介绍

    一.unsqueeze()函数 1. 首先初始化一个a 可以看出a的维度为(2,3) 2. 在第二维增加一个维度,使其维度变为(2,1,3) 可以看出a的维度已经变为(2,1,3)了,同样如果需要在倒 ...

  8. pytorch 中 squeeze 和unsqueeze函数

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

  9. 【Pytorch】tensor类型数据.squeeze()和.unsqueeze()函数的简明教程(一看就会)

    文章目录 1 squeeze 1.1 1.2 1.3 执行操作后需要写回 2 unsqueeze pytorch系列代码中常见的两个函数squeeze()和unsqueeze() 1 squeeze ...

最新文章

  1. POJ1144:Network(无向连通图求割点)
  2. dedecms--数据库
  3. 【错误记录】编译 Linux 内核报错 ( fatal error: openssl/opensslv.h: No such file or directory )
  4. 修改vsftpd的默认根目录/var/ftp/pub到另一个目录
  5. 内温的整体优先效应实验_陕西师范大学《普通心理学》第四章-知觉
  6. Java面试中常问的Spring方面问题
  7. 服务器响应为4.7.0,454 4.7.0 临时身份验证失败 - Exchange | Microsoft Docs
  8. discuz二次元文章博客模板
  9. 萧功秦:为什么我们缺少特立独行的人生态度
  10. 算法不会,尚能饭否之排序——直接选择排序
  11. linux中的root命令,在linux终端中执行root命令
  12. 实践出真知--ZAC《网络营销实战密码》
  13. 数字锁相环:二阶环的FPGA实现(基于quartus+matlab)
  14. 短视频jiexi客户端源代码
  15. ISP封了80和8080端口
  16. 硬件知识——主板结构
  17. win10 蓝牙忽然消失,设备管理器有未知USB设备描述符请求失败
  18. 用matlab实现电影推荐性能测试,优化标准测试函数及MATLAB代码
  19. 数值计算——线性最小二乘问题
  20. 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器

热门文章

  1. Python学习:关键字global和nonlocal的用法说明
  2. SQL Server 2008中的分区表(二),张孝祥java基础在线视频教程
  3. 不用找,宝藏中秋节海报设计模板素材网站在这里
  4. 看完这篇文章你可能就学会ofd在线转换成pdf了
  5. java 中byte[] 数组的合并
  6. lmx2592频率源原理图和程序源码。 20MHz——9.8GHz的低噪声锁相环频率源
  7. mysql聚合函数 where_MySql聚合函数
  8. 工厂人员定位系统源码,支持智能考勤、工时统计、行为检测、历史轨迹回放、人员管理、电子围栏功能
  9. c语言二叉树的遍历菜单系统,二叉树遍历C语言的实现
  10. 西门子连接id_S7-200与电脑连接