文章目录

  • 1.torch.squeeze
  • 2.torch.unsqueeze
  • 3.给一个使用上述两个函数,并进行一次卷积的例子

附上官网地址:
https://pytorch.org/docs/stable/index.html

1.torch.squeeze

squeeze的用法主要就是对数据的维度进行压缩或者解压。

先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。

换言之:
表示若第arg维的维度值为1,则去掉该维度,否则tensor不变。(即若tensor.shape()[arg] == 1,则去掉该维度)
例如:
一个维度为2x1x2x1x2的tensor,不用去想它长什么样儿,squeeze(0)就是不变,squeeze(1)就是变成2x2x1x2。(0是从最左边的维度算起的)

>>> x = torch.zeros(2, 1, 2, 1, 2)
>>> x.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x)
>>> y.size()
torch.Size([2, 2, 2])
>>> y = torch.squeeze(x, 0)
>>> y.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x, 1)
>>> y.size()
torch.Size([2, 2, 1, 2])

2.torch.unsqueeze

torch.unsqueeze()这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度。

>>> x = torch.tensor([1, 2, 3, 4])
>>> torch.unsqueeze(x, 0)
tensor([[ 1,  2,  3,  4]])
>>> torch.unsqueeze(x, 1)
tensor([[ 1],[ 2],[ 3],[ 4]])

3.给一个使用上述两个函数,并进行一次卷积的例子

from torchvision.transforms import  ToTensor
import torch as t
from torch import nnimport cv2
import numpy as np
import cv2
to_tensor = ToTensor()
# 加载图像
lena = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('lena', lena)
# input = to_tensor(lena) 将ndarray转换为tensor,自动将[0,255]归一化至[0,1]。
input = to_tensor(lena).unsqueeze(0)
# 初始化卷积参数
kernel = t.ones(1, 1, 3, 3)/-9
kernel[:, :, 1, 1] = 1
conv = nn.Conv2d(1, 1, 3, 1, padding=1, bias=False)
conv.weight.data = kernel.view(1, 1, 3, 3)
# 输出
out = conv(input)
out = out.squeeze(0)
print(out.shape)
out = out.unsqueeze(3)
print(out.shape)
out = out.squeeze(0)
print(out.shape)
out = out.detach().numpy()# 缩放到0~最大值
cv2.normalize(out, out, 1.0, 0, cv2.NORM_INF)
cv2.imshow("lena-result", out)
cv2.waitKey()

结果图如下:

references:
[1] 陈云.深度学习框架之PyTorch入门与实践.北京:电子工业出版社,2018.

PyTorch中的squeeze()和unsqueeze()详解与应用案例相关推荐

  1. PyTorch中的torch.nn.Parameter() 详解

    PyTorch中的torch.nn.Parameter() 详解 今天来聊一下PyTorch中的torch.nn.Parameter()这个函数,笔者第一次见的时候也是大概能理解函数的用途,但是具体实 ...

  2. PyTorch中squeeze()和unsqueeze()详解

    pytorch中squeeze()和unsqueeze()作用 squeeze() squeeze() 用于在张量的指定维度插入新的维度 (为1) 得到维度提升的张量. unsqueeze() uns ...

  3. Pytorch中 nn.Transformer的使用详解与Transformer的黑盒讲解

    文章目录 本文内容 将Transformer看成黑盒 Transformer的推理过程 Transformer的训练过程 Pytorch中的nn.Transformer nn.Transformer简 ...

  4. pytorch中DataLoader的num_workers参数详解与设置大小建议

    Q:在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的? train_loader = torch.utils.data.Data ...

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

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

  6. Java中Unsafe类的原理详解与使用案例

    点击关注公众号,利用碎片时间学习 1 概述 本文基于JDK1.8. Unsafe类位于rt.jar包,Unsafe类提供了硬件级别的原子操作,类中的方法都是native方法,它们使用JNI的方式访问本 ...

  7. pytorch中的squeeze和unsqueeze

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

  8. pytorch中的squeeze和unsqueeze函数的使用

    应用场景:当我们进行深度学习使用Image函数导入图片时,默认它的维度为[C, H, W],此时根据模型的需要导入batch这一维度. 部分程序 # 导入要测试的图像(自己找的,不在数据集中),放在源 ...

  9. js中转换json对象方法详解及使用案例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

最新文章

  1. 建议收藏这7个软件,自用良心推荐!
  2. python 对 yaml 文件操作
  3. Facebook称其新的AI技术可以更快发现仇恨言论
  4. memmove 和 memcpy的区别
  5. SQL Server 临时表
  6. Shell命令-Sort,Join
  7. 做人:失信是最大的破产!
  8. 计算机信息管理相关课题论文,计算机信息管理课题论文[].doc
  9. SQL注入学习part06:(结合sqli-libs学习:51-61关)
  10. UI4(事件,手势)
  11. Android 8.0 VDEX机制简介
  12. 重庆兴渝计算机培训中心,重庆兴渝职业中等专业学校2021招生录取分数线
  13. 【转载】深入浅出讲解FOC算法与SVPWM技术——自制FOC驱动器
  14. 在线重建索引 oracle,ORACLE重建索引详解
  15. B-JUI表单验证规则总结
  16. oracle hugepage设置,Linux系统下快速配置HugePages的完整步骤
  17. Android 圆形头像的两种实现方式
  18. 关于有道云笔记md文档图片不显示的解决方案
  19. 猜数字 随机生成一个1-100之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或者过小,如果猜对恭喜玩家胜利,并且退出游戏。
  20. SQL Server 2012 最新技术 PowerView 让你的业务会说话 [上篇]

热门文章

  1. trs ids身份服务器系统实现统一身份认证与单点登录平台技术,统一身份认证系统设计与实现...
  2. 正则 [.\n]* (.|\n)* 区别
  3. 通过Google+设置壁纸报错
  4. springboot配置进行https请求访问demo
  5. PHP正则表达式修饰符
  6. PHP正则表达式教程
  7. Week of 2.21
  8. Java中的Switch用法
  9. 用R语言画切线和法线
  10. Python - 至多包含两个字符的最大子串