unsqueeze() 方法与squeeze() 方法

unsqueeze() 方法在 PyTorch 中用于在指定的维度位置插入一个维度大小为 1 的新维度。

tips:

()内指定维度位置,‘0’表示第一个维度位置,以此类推‘1’ ‘2’ ‘3’.......

1.增加一个维度

import torch# 创建一个形状为 [4] 的一维张量
x = torch.tensor([1, 2, 3, 4])# 使用 unsqueeze 在第一个维度位置增加一个维度,结果形状变为 [1, 4]
x_unsqueezed = x.unsqueeze(0)print(x.shape)
print(x)
print('*'*50)
print(x_unsqueezed.shape)
print(x_unsqueezed)# 输出:
torch.Size([4])
tensor([1, 2, 3, 4])
**************************************************
torch.Size([1, 4])
tensor([[1, 2, 3, 4]])

2.在中间维度插入一个维度

# 创建一个形状为 [3, 4] 的二维张量
x = torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])# 使用 unsqueeze 在第二个维度位置增加一个维度,结果形状变为 [3, 1, 4]
x_unsqueezed = x.unsqueeze(1)print(x.shape)
print(x)
print('*'*50)
print(x_unsqueezed.shape)
print(x_unsqueezed)# 输出
torch.Size([3, 4])
tensor([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])
**************************************************
torch.Size([3, 1, 4])
tensor([[[ 1,  2,  3,  4]],[[ 5,  6,  7,  8]],[[ 9, 10, 11, 12]]])

3.在特定位置插入多个维度

# 创建一个形状为 [2, 2] 的二维张量
x = torch.tensor([[1, 2],[3, 4]])
# 使用 unsqueeze 在第一和第三维度位置各增加一个维度,结果形状变为 [1, 2, 1, 2]
x_unsqueezed = x.unsqueeze(0).unsqueeze(2)print(x.shape)
print(x)
print('*'*50)
print(x_unsqueezed.shape)
print(x_unsqueezed)# 输出:
torch.Size([2, 2])
tensor([[1, 2],[3, 4]])
**************************************************
torch.Size([1, 2, 1, 2])
tensor([[[[1, 2]],[[3, 4]]]])

4.使用 unsqueeze 进行广播

# 创建一个形状为 [4] 的一维张量
a = torch.tensor([1, 2, 3, 4])# 创建一个形状为 [3, 4] 的二维张量
b = torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])# 使用 unsqueeze 使 a 可以广播到 b 的形状
a_unsqueezed = a.unsqueeze(0)  # 形状变为 [1, 4]# 现在 a_unsqueezed 和 b 可以进行广播操作
result = a_unsqueezed + bprint(a.shape)
print(a)
print(a_unsqueezed)
print('*'*50)
print(b.shape)
print(b)
print('*'*50)
print(result)# 输出
torch.Size([4])
tensor([1, 2, 3, 4])
tensor([[1, 2, 3, 4]])
**************************************************
torch.Size([3, 4])
tensor([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])
**************************************************
tensor([[ 2,  4,  6,  8],[ 6,  8, 10, 12],[10, 12, 14, 16]])

5.在多维张量中插入多个维度

# 创建一个形状为 [2, 3, 4] 的三维张量
x = torch.randn(2, 3, 4)# 使用 unsqueeze 在第二和第四维度位置各增加一个维度,结果形状变为 [2, 1, 3, 1, 4]
x_unsqueezed = x.unsqueeze(1).unsqueeze(3)print(x.shape)
print(x)
print('*'*50)
print(x_unsqueezed.shape)
print(x_unsqueezed)# 输出
torch.Size([2, 3, 4])
tensor([[[ 0.7232, -1.1270, -0.3702, -0.6435],[ 1.2270, -0.6766,  1.0700, -1.4295],[-0.6011,  0.0285, -0.2584, -0.9866]],[[ 0.8701,  1.1882, -0.6923,  0.9238],[ 0.6200,  1.7528,  1.1101,  0.3141],[-0.7319,  0.1732, -0.5922,  0.4118]]])
**************************************************
torch.Size([2, 1, 3, 1, 4])
tensor([[[[[ 0.7232, -1.1270, -0.3702, -0.6435]],[[ 1.2270, -0.6766,  1.0700, -1.4295]],[[-0.6011,  0.0285, -0.2584, -0.9866]]]],[[[[ 0.8701,  1.1882, -0.6923,  0.9238]],[[ 0.6200,  1.7528,  1.1101,  0.3141]],[[-0.7319,  0.1732, -0.5922,  0.4118]]]]])

6.将标量转换为张量

import torch# 创建一个标量值
scalar = 5# 将标量转换为一个 PyTorch 张量
scalar_tensor = torch.tensor(scalar)# 使用 unsqueeze 在第一个维度位置增加一个维度,结果形状变为 [1]
scalar_tensor_unsqueeze = scalar_tensor.unsqueeze(0)print(type(scalar))
print(scalar_tensor.shape)
print(scalar_tensor)
print('*'*50)
print(scalar_tensor_unsqueeze.shape)
print(scalar_tensor_unsqueeze)# 输出
<class 'int'>
torch.Size([])
tensor(5)
**************************************************
torch.Size([1])
tensor([5])

squeeze() 函数在 PyTorch 中用于从张量中移除所有长度为 1 的维度。这通常用于减少张量的维度,特别是在某些操作之后,其中某些维度可能只有一个元素,而这些单一元素的维度不再需要。

 1.移除单维度

import torch# 创建一个形状为 [1, 3, 1] 的张量
x = torch.randn(1, 3, 1)# 使用 squeeze() 移除单维度
y = x.squeeze()# 打印 y 的形状
print(y.shape)  # 输出: torch.Size([3])

2.选择性移除单维度 

# 创建一个形状为 [2, 1, 4, 1] 的张量
x = torch.randn(2, 1, 4, 1)# 使用 squeeze(1) 移除第二个维度
y = x.squeeze(1)# 打印 y 的形状
print(y.shape)  # 输出: torch.Size([2, 4, 1])

 3.移除所有单维度

# 创建一个形状为 [1, 2, 1, 3, 1] 的张量
x = torch.randn(1, 2, 1, 3, 1)# 使用 squeeze() 移除所有单维度
y = x.squeeze()# 打印 y 的形状
print(y.shape)  # 输出: torch.Size([2, 3])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用AI提高生产效率?

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的各个领域&#xff0c;特别是在工业生产中&#xff0c;AI技术的应用正在改变着传统的生产模式&#xff0c;极大地提高了生产效率。本文将从AI技术的特点、应用场景、实施策…

公网IP是固定的吗?

公网IP&#xff08;Public IP address&#xff09;是指可以直接在互联网上访问的IP地址&#xff0c;用于标识网络上的设备或主机。在互联网中&#xff0c;公网IP是有限且宝贵的资源。很多人都有一个疑问&#xff0c;那就是公网IP是固定的吗&#xff1f; 公网IP的获取 我们需要…

技术分享 | 京东商品API接口|京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分&#xff1a; 1.京东API接口介绍 2. 平台产品能力介绍 3. 业务赋能案例分享 01 京东API接口介绍 02 平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用数据分析和可视化技术&…

Javaweb项目搭建以及介绍

综合案例-体育商品网站 注意&#xff1a;本项目要求使用mysql5.0版本&#xff0c;否则因技术过来出现版本不兼容的问题 1 导入sql语句 先建一个名为typpsc1数据库 导入数据库 2 项目结构 2.1 导入文件 2.2 配置tomcat 删除cms自带tomcat 安装本地的tomcat 选择tomcat版本 在…

中间件的使用

中间件是全局使用 工厂函数定义中间件 middleware.py # 工厂函数的中间件 def simple_middleware(get_response):def middleware(request):print("在视图函数处理之前执行、、、、、")response get_response(request)print("在视图函数处理之后执行。。。。…

钟表——蓝桥杯十三届2022国赛大学B组真题

问题分析 这个问题的关键有两点&#xff1a;1.怎么计算时针&#xff0c;分针&#xff0c;秒针之间的夹角&#xff0c;2.时针&#xff0c;分针&#xff0c;秒针都是匀速运动的&#xff0c;并非跳跃性的。问题1很好解决看下面的代码就能明白&#xff0c;我们先考虑问题2&#xf…

PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态

批量生成Checkbox并添加到TableWidget中 for i in range(10):checkbox_i QCheckBox(fCheckbox_{i}) # 生成Checkbox并命名为Checkbox_iself.ui_1.tableWidget_1.setCellWidget(i,1,checkbox_i) 批量检查勾选状态 # 批量生成Checkbox并存入列表 list_Checkbox_1 [] for …

Tomcat端口占用解决方案

Windows操作系统 出现这种情况&#xff1a; Error was Port already in use :40001&#xff1b;nested exception is :java.net.BindException: Address already in use : JVM_Bind; 步骤1&#xff1a;按下winR键&#xff0c;输入cmd 步骤2&#xff1a;输入以下命令 netstat …

git cherry-pick冲突解决

git-cherry使用 git cherry-pick冲突解决&#xff1a; 我使用的vscode, 选择incomming&#xff0c;没实际图片&#xff0c;不贴了。。。 解决冲突后&#xff0c; git add . 再&#xff0c; git cherry-pick --continue 然后 git push 即可 若&#xff1a; remote: GitLab…

Vue2中引入ElementUI

Vue中引入ElementUI 目录 Vue中引入ElementUI安装 全库导入main.py使用 仅引入样式文件main.py使用 安装 官方文档 npm i element-ui -S全库导入 main.py import ElementUI from element-ui;Vue.use(ElementUI)使用 <template> <div class"main">&l…

AXI4-Lite读写时序在AXI Block RAM 控制器IP核中的应用

AXI Block RAM (BRAM) 控制器是一个软件IP核&#xff0c;专为与Xilinx Vivado设计套件一起使用而设计。该IP核被设计为AXI端点从设备IP&#xff0c;用于与AXI互联和系统主设备集成&#xff0c;以便与本地块RAM进行通信。 AXI BRAM控制器IP核可以通过设置设计参数C_S_AXI_PROTOC…

anything-llm的嵌入式聊天小部件

anything-llm 详情移步到官方: https://github.com/Mintplex-Labs/anything-llm anything-llm可以docker启动和本地启动 例如&#xff1a;docker 启动&#xff0c; 自行去安装docker哈 cd 到docker文件夹下&#xff0c; 窗口运行&#xff1a; docker-compose up -d --build运…

Qt客户端开发的技术难点

Qt客户端开发中可能会遇到的下面的一些技术难点&#xff0c;了解这些难点并采取有效的措施可以帮助开发者更高效地进行Qt客户端开发。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.跨平台兼容性&#xff1a; Qt框架支持多种操作系…

Leetcode127.单词接龙

https://leetcode.cn/problems/word-ladder/description/?envTypestudy-plan-v2&envIdtop-interview-150 文章目录 题目描述解题思路代码-BFS解题思路二——双向BFS代码 题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 …

2024.05.08作业

登陆部分代码 /登陆槽函数 void Widget::btn_clicked() {if(edit1->text()"Admin" && edit2->text()"123456"){//登陆成功对话框QMessageBox box(QMessageBox::Information,"信息对话框","登陆成功",QMessageBox::Ok,t…

制冷机组喷液冷却与经济器的介绍

在制冷机组中&#xff0c;喷液冷却与经济器两者虽同可以为提升制冷系统效率与性能&#xff0c;经济器是一种特殊的换热器&#xff0c;主要用于制冷系统中&#xff0c;以提高系统的效率和性能。通常安装在制冷机组的冷凝器之后、膨胀阀之前的位置&#xff0c;确保在制冷剂流向蒸…

hadoop学习---基于Hive的教育平台数据仓库分析案例(三)

衔接第一部分&#xff0c;第一部分请点击&#xff1a;基于Hive的教育平台数据仓库分析案例&#xff08;一) 衔接第二部分&#xff0c;第二部分请点击&#xff1a;基于Hive的教育平台数据仓库分析案例&#xff08;二) 学生出勤模块&#xff08;全量分析&#xff09;&#xff1a…

手写Spring Ioc 循环依赖底层源码剖析

手写Spring Ioc 循环依赖底层源码剖析 前言 Spring Ioc 是一个非常重要的框架&#xff0c;它的核心是依赖注入&#xff08;DI&#xff09;和控制反转&#xff08;IOC&#xff09;。在使用 Spring Ioc 的过程中&#xff0c;我们经常会遇到循环依赖的问题。本文将介绍手写 Spri…

生产制造中刀具管理系统,帮助工厂不再频繁换刀

一、刀具管理的定义与重要性 刀具管理是指对生产过程中使用的各种刀具进行计划、采购、存储、分配、使用、监控、维修和报废等全过程的管理。刀具作为制造过程中的直接工具&#xff0c;其性能、质量和使用效率直接影响产品的加工精度、表面质量和生产效率。因此&#xff0c;建…

算法学习(6)-最短路径

目录 Floyd-Warshall算法 Dijkstra算法 Bellman-Ford算法 Bellman-Ford的队列优化 最短路径算法对比分析 Floyd-Warshall算法 现在回到问题&#xff1a;如何求任意两点之间的最短路径呢&#xff1f; 通过之前的学习&#xff0c; 我们知道通过深度或广度优先搜索可以求出两…