PyTorch Tensor 形状变化操作详解
PyTorch Tensor 形状变化操作详解
在深度学习中,Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状,以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作,并通过示例代码进行说明。
1. 基础形状操作
1.1 view 和 reshape
- 功能:改变 Tensor 的形状而不改变其数据。
- 区别:
view要求新形状的总元素数与原形状一致,否则会报错。reshape更灵活,如果无法直接改变形状,会尝试创建一个新的 Tensor。
- 示例:
tensor = torch.randn(2, 3, 4) # 原形状为 (2, 3, 4)
reshaped_tensor = tensor.view(2, 12) # 改变形状为 (2, 12)
print(reshaped_tensor.shape) # 输出: torch.Size([2, 12])
1.2 squeeze 和 unsqueeze
- 功能:
squeeze:移除大小为 1 的维度。unsqueeze:在指定位置插入大小为 1 的维度。
- 示例:
tensor = torch.randn(1, 3, 1, 4) # 原形状为 (1, 3, 1, 4)
squeezed_tensor = tensor.squeeze() # 移除所有大小为 1 的维度
print(squeezed_tensor.shape) # 输出: torch.Size([3, 4])unsqueezed_tensor = squeezed_tensor.unsqueeze(0) # 在第 0 维插入大小为 1 的维度
print(unsqueezed_tensor.shape) # 输出: torch.Size([1, 3, 4])
2. 高级形状操作
2.1 permute
- 功能:重新排列 Tensor 的维度顺序。
- 示例:
tensor = torch.randn(2, 3, 4) # 原形状为 (2, 3, 4)
permuted_tensor = tensor.permute(2, 0, 1) # 调整为 (4, 2, 3)
print(permuted_tensor.shape) # 输出: torch.Size([4, 2, 3])
2.2 transpose
- 功能:交换指定的两个维度。
- 示例:
tensor = torch.randn(3, 4) # 原形状为 (3, 4)
transposed_tensor = tensor.transpose(0, 1) # 交换第 0 和第 1 维度
print(transposed_tensor.shape) # 输出: torch.Size([4, 3])
2.3 flatten
- 功能:将指定范围内的维度展平为一维。
- 示例:
tensor = torch.randn(2, 3, 4) # 原形状为 (2, 3, 4)
flattened_tensor = tensor.flatten(start_dim=1) # 展平从第 1 维开始
print(flattened_tensor.shape) # 输出: torch.Size([2, 12])
2.4 repeat
- 功能:沿指定维度重复 Tensor。
- 示例:
tensor = torch.tensor([[1, 2], [3, 4]]) # 原形状为 (2, 2)
repeated_tensor = tensor.repeat(2, 3) # 在第 0 维重复 2 次,在第 1 维重复 3 次
print(repeated_tensor.shape) # 输出: torch.Size([4, 6])
2.5 expand
- 功能:在不复制数据的情况下扩展 Tensor 的形状(仅适用于大小为 1 的维度)。
- 示例:
tensor = torch.tensor([[1], [2], [3]]) # 原形状为 (3, 1)
expanded_tensor = tensor.expand(3, 4) # 扩展为 (3, 4)
print(expanded_tensor)
# 输出:
# tensor([[1, 1, 1, 1],
# [2, 2, 2, 2],
# [3, 3, 3, 3]])
3. 数据提取与分散
3.1 narrow
- 功能:按指定维度和范围提取部分 Tensor。
- 示例:
tensor = torch.arange(10) # 原形状为 (10,)
narrowed_tensor = tensor.narrow(0, 2, 4) # 从第 0 维索引 2 开始提取长度为 4 的部分
print(narrowed_tensor) # 输出: tensor([2, 3, 4, 5])
3.2 gather
- 功能:根据索引从指定维度收集元素。
- 示例:
tensor = torch.tensor([[1, 2], [3, 4]]) # 原形状为 (2, 2)
indices = torch.tensor([[0, 1], [1, 0]]) # 索引矩阵
gathered_tensor = torch.gather(tensor, 1, indices) # 按列索引收集
print(gathered_tensor)
# 输出:
# tensor([[1, 2],
# [4, 3]])
3.3 scatter
- 功能:根据索引将值分散到目标 Tensor 中。
- 示例:
tensor = torch.zeros(2, 3) # 目标 Tensor,初始为零
indices = torch.tensor([[0, 1, 2], [2, 0, 1]]) # 索引矩阵
values = torch.tensor([[5, 6, 7], [8, 9, 10]]) # 值矩阵
scattered_tensor = tensor.scatter(1, indices, values) # 按列分散赋值
print(scattered_tensor)
# 输出:
# tensor([[5., 6., 7.],
# [0., 9., 8.]])
4. 对角操作
4.1 diag
- 功能:提取对角线元素或将一维 Tensor 转换为对角矩阵。
- 示例:
tensor = torch.tensor([1, 2, 3]) # 一维 Tensor
diag_tensor = torch.diag(tensor) # 创建对角矩阵
print(diag_tensor)
# 输出:
# tensor([[1, 0, 0],
# [0, 2, 0],
# [0, 0, 3]])
相关文章:
PyTorch Tensor 形状变化操作详解
PyTorch Tensor 形状变化操作详解 在深度学习中,Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状,以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作࿰…...
文字识别软件cnocr学习笔记
• 安装 pip install cnocr • 基础的使用方法 首次运行会下载安装模型,如果没有梯子,会报错: 在网络上查找cnocr的模型资源,并下载到本地。https://download.csdn.net/download/qq_33464428/89514689?ops_request_misc%257B%2…...
本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】
本地部署DeepSeek R1 界面可视化open-webui 本文主要讲述如何用ollama镜像和open-webui镜像部署DeepSeek R1, 镜像比较方便我们在各个机器之间快速部署。 显卡推荐 模型版本CPU内存GPU显卡推荐1.5B4核8GB非必需4GBRTX1650、RTX20607B、8B8核16GB8GBRTX3070、RTX…...
macOS部署DeepSeek-r1
好奇,跟着网友们的操作试了一下 网上方案很多,主要参考的是这篇 DeepSeek 接入 PyCharm,轻松助力编程_pycharm deepseek-CSDN博客 方案是:PyCharm CodeGPT插件 DeepSeek-r1:1.5b 假设已经安装好了PyCharm PyCharm: the Pyth…...
基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片?1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...
基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...
C++中const T为什么少见?它有什么用途?
在C中,右值引用(T&&)是移动语义和完美转发的核心特性之一,但你是否注意到,const T&&(const右值引用)却很少被使用?它到底有什么用途? 今天我们就来深入…...
Leetcode 位计算
3095. 或值至少 K 的最短子数组 I 3097. Shortest Subarray With OR at Least K II class Solution:def minimumSubarrayLength(self, nums: List[int], k: int) -> int:n len(nums)bits [0] * 30res infdef calc(bits):return sum(1 << i for i in range(30) if…...
SpringBoot3.x整合WebSocket
SpringBoot3.x整合WebSocket 本文主要介绍最新springboot3.x下如何整合WebSocket. WebSocket简述 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议ÿ…...
猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势
1. 原生Office功能完整嵌入,排版一致性保障 猿大师办公助手直接调用本地安装的微软Office、金山WPS或永中Office,支持所有原生功能(如复杂公式、VBA宏等),确保网页编辑与本地打开的文档排版完全一致。 提供OLE嵌入和完…...
STM32创建静态库lib
创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置:stm32f4xx_conf.h1.2.4 HAL库的配置:stm32f4xx_hal_conf.h1.2.5 LL库配置:stm32f4xx_ll_conf.h 1.3 移植通用文…...
Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠
Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠 作为数据工程师,Hive JOIN就像吃火锅选蘸料——放错位置味道全变!今天带你破解字节/阿里等大厂高频面试题:ON和WHERE后的过滤条件究竟有什么不同? 一、核心差异对比表 特性ON子句WHERE子句执行时机JOIN操作时JOIN完成后…...
MAC快速本地部署Deepseek (win也可以)
MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型(LLM)本地运行框架,旨在简化大模型的部署和管理流程,使开发者、研究人员及爱好者能够高效地在本地环境中实验和…...
javaEE-13.spring MVC
目录 什么是spring web mvc: 什么是MVC: 一.创建一个spring项目 二.实现功能: 创建helloController.java项目: 建立连接: RequestMapping注解: 1.RequestMapping注解的使用: 2. RequestMapping 是GET还是POST请求 3.指定请求方法 RestControll…...
C/C++ | 每日一练 (2)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...
Nginx 常用命令和部署详解及案例示范
一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务,可以使用以下命令: sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务,可以使用以下命令: sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…...
GO大模型应用开发框架-
Eino 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架,如 LangChain 和 LlamaIndex 等获取灵感,同时借鉴前沿研究成果与实际应用,提供了一个强调简洁性、可扩展性、可靠性与有效性࿰…...
保姆级!springboot访问Ollama API并调用DeepSeek模型 Api
要在springboot中访问Ollama API并调用DeepSeek模型,你需要遵循以下步骤。首先,确保你有一个有效的Ollama服务器实例运行中,并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级!使用Ollama本地部署DeepSeek-R1大模型 并java通过api 调用 使用Spring Boot + Sprin…...
力扣hot100 ——搜索二维矩阵 || m+n复杂度优化解法
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 解题思路: 借助行和列有序特性,不断按行或者列缩小范围;途中数字表示每…...
娱乐使用,可以生成转账、图片、聊天等对话内容
软件介绍 今天要给大家介绍一款由吾爱大佬 lifeixue 开发的趣味软件。它的玩法超丰富,能够生成各式各样的角色,支持文字聊天、发红包、转账、发语音以及分享图片等多种互动形式,不过在分享前得着重提醒,此软件仅供娱乐࿰…...
AI通识-大模型的原理应用
一、大模型原理 AI产生智能的三要素分别是:算法、数据、算力。AI的智能还是基于各种数学计算产生的。 1、模型的训练 AI的神经网络模型就是在模仿人类的神经元: 你给它输入一些参数,最终它经过计算返回一个结果。因此从某种意义上…...
从PyTorch 2.3源码切入CUDA 13算子注册机制:手写一个支持动态shape的FlashAttention-3内核(附可运行benchmark)
更多请点击: https://intelliparadigm.com 第一章:CUDA 13编程与AI算子优化对比评测报告的定位与价值 核心定位 本报告并非通用 CUDA 教程或性能调优手册,而是聚焦于 AI 推理与训练场景中,CUDA 13 新特性(如 PTX 8.…...
如何在7分钟内搭建专业级仓库管理系统:从零到生产就绪的完整指南
如何在7分钟内搭建专业级仓库管理系统:从零到生产就绪的完整指南 【免费下载链接】GreaterWMS This Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I start thi…...
OpenRGB终极指南:三步搞定所有RGB设备灯光同步,告别多软件烦恼!
OpenRGB终极指南:三步搞定所有RGB设备灯光同步,告别多软件烦恼! 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/…...
FormKit深度解析:基于Vue ue 3的声明式表单框架实战指南
1. 项目概述:一个为现代Web开发而生的表单解决方案如果你和我一样,在Vue.js项目中构建过复杂的表单,那你一定对那种重复、繁琐且容易出错的状态管理深有体会。从字段验证、错误提示、表单提交到与后端API的交互,每一个环节都需要投…...
TiDB 实战项目:从需求分析到生产级代码完整记录
一、前言TiDB 实战项目:从需求分析到生产级代码完整记录。本文从实际项目出发,给出完整可运行的代码,帮你快速掌握实战技能。二、需求分析与架构设计2.1 业务需求功能需求: - 用户注册/登录,支持邮箱和手机号 - JWT 无…...
【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 音频播放功能适配与实现指南
Flutter for OpenHarmony 音频播放功能适配与实现指南 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 摘要 在 OpenHarmony 生态持续扩张与 Flutter 跨平台开发深度融合的背景下,存量 Flutter 应用向鸿蒙终端迁移的技术需求日益…...
ComfyUI IPAdapter Plus完整指南:轻松实现图像引导AI生成
ComfyUI IPAdapter Plus完整指南:轻松实现图像引导AI生成 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 想要让AI生成的图像完美融合你的参考图片风格吗?ComfyUI IPAdapter Plu…...
Superturtle:模块化命令行工具集的设计哲学与自动化实践
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫Rigos0/superturtle。乍一看这个名字,你可能会联想到“超级乌龟”,感觉有点无厘头。但作为一个在自动化脚本和系统工具领域摸爬滚打多年的老手,我深知这类名字背后往往藏…...
XGBoost多线程优化实战与性能调优指南
1. 理解XGBoost多线程优化的核心价值XGBoost作为机器学习竞赛中的常胜将军,其性能优势很大程度上来自于对多核CPU的充分利用。但在实际项目中,很多开发者只是简单设置n_jobs-1就认为万事大吉,这往往无法发挥硬件的最佳性能。我在金融风控领域…...
