【Python进阶】einops库的总:张量重排,重复,堆叠操作利器 | rearrange reduce repeat stack

深度学习中,往往需要大量的形状改变,我见到的最多的便是rearrange

他其实是属于einops这个库的,这个库的更多使用方式整理如下

文章目录

  • 1 rearrange函数 重排
  • 2 reduce 计算平均值
  • 3 repeat和stack

einops 是一个用于重新排列和重塑张量的库,它的目标是简化张量操作的表达和实现。 einops 提供了一种类似于 Einstein 符号约定的语法,用于描述张量操作,使得代码更具可读性和可维护性。

einops 的核心是 einops.rearrange 函数,该函数接受一个输入张量和一个描述如何重新排列张量的字符串,并返回重新排列后的张量。除了 rearrange 函数之外,einops 还提供了许多其他函数,如 einops.reduceeinops.repeateinops.stack 等,用于执行各种张量操作。

1 rearrange函数 重排

当我们需要将形状为 (batch_size, height, width, channels) 的张量重排成 (batch_size, channels, height, width) 时,可以使用 einopsrearrange 函数。示例如下:

import torch
from einops import rearrange# 创建一个形状为 (2, 3, 4, 5) 的张量
x = torch.randn(2, 3, 4, 5)# 使用 einops 将张量重排为 (2, 5, 3, 4)
x_rearranged = rearrange(x, 'batch height width channels -> batch channels height width')print(x.shape)             # 输出: torch.Size([2, 3, 4, 5])
print(x_rearranged.shape)  # 输出: torch.Size([2, 5, 3, 4])

2 reduce 计算平均值

(batch_size, height, width, channels) 的张量沿着通道维度求平均值,得到形状为 (batch_size, 1, height, width) 的输出。这可以使用 einopsreduce 函数来实现:

from einops import reduce# 创建一个形状为 (2, 3, 4, 5) 的张量
x = torch.randn(2, 3, 4, 5)# 使用 einops 沿着通道维度求平均值
x_mean = reduce(x, 'batch channels height width -> batch 1 height width', 'mean')print(x.shape)      # 输出: torch.Size([2, 3, 4, 5])
print(x_mean.shape) # 输出: torch.Size([2, 1, 4, 5])

在这个例子中,我们使用了 reduce 函数,并提供了描述输入和输出形状的字符串 'batch channels height width -> batch 1 height width''mean' 来实现沿着通道维度求平均值的操作。

3 repeat和stack

repeatstack 的对比:

  1. repeat 用于重复张量的元素,可以在指定的轴上重复张量的某些维度,但不会改变张量的维度数量。它通过重复元素来改变张量的形状。例如,将形状为 (batch_size, height, width, channels) 的张量在高度、宽度和通道维度上重复一次,形状变为 (batch_size, height * 2, width * 2, channels)

  2. stack 用于堆叠多个张量,可以在指定的轴上增加新的维度,将多个张量堆叠在一起形成一个新的维度。它通过堆叠张量来改变张量的维度数量。例如,将两个形状相同的张量在通道维度上堆叠,形状变为 (batch_size, 2, height, width, channels)

因此,repeat 主要用于改变张量的形状,而 stack 主要用于改变张量的维度数量。两者在功能和使用场景上有明显的区别,需要根据具体的需求来选择使用哪个函数。

  1. repeat 的示例:
import torch
from einops import repeat# 创建一个形状为 (2, 3) 的张量
x = torch.tensor([[1, 2, 3], [4, 5, 6]])# 使用 einops 在行和列上分别重复一次
x_repeated = repeat(x, 'h w -> h (repeat) w (repeat)', repeat=2)print(x.shape)           # 输出: torch.Size([2, 3])
print(x_repeated.shape)  # 输出: torch.Size([2, 2, 3, 2])

在这个例子中,我们使用 repeat 函数将形状为 (2, 3) 的张量 x 在行和列上分别重复一次,得到形状为 (2, 2, 3, 2) 的张量 x_repeated

  1. stack 的示例:
import torch
from einops import stack# 创建两个形状相同的张量
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
y = torch.tensor([[7, 8, 9], [10, 11, 12]])# 使用 einops 在新的维度上堆叠张量
stacked_tensor = stack([x, y], 'b h w -> b (stack) h w')print(stacked_tensor.shape)  # 输出: torch.Size([2, 2, 3])

在这个例子中,我们使用 stack 函数将两个形状相同的张量 xy 在新的维度上堆叠,得到形状为 (2, 2, 3) 的堆叠张量 stacked_tensor

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

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

相关文章

南网科研院携手百度智能云,入选信通院AI原生应用优秀案例

为呈现AI原生研发和应用成效,提供AI原生相关技术、服务、部署、运营、基础设施等选型参考,近期,中国信息通信研究院发布了AI原生技术及应用优秀案例,由南方电网公司输配电部牵头、南方电网科学研究院有限责任公司(以下…

Web安全攻防世界01 fileinclude(宜兴网信办)

<html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head> //规定 HTML 文档的字符集<br /> <b>Notice</b>: Undefined index: language in <b>/var/www/html/index.ph…

Docket常见的软件部署1

1 安装MySQL # 查看MySQL镜像 docker search mysql # 拉起镜像 docker pull mysql:5.7 # 创建MySQL数据映射卷&#xff0c;防止数据不丢失 mkdir -p /hmoe/tem/docker/mysql/data/ # 启动镜像 docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -v /home…

牛客NC79 丑数【中等 堆、优先级队列 Java,Go,PHP Go和PHP中我自己实现了优先级队列】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b 思路 注意&#xff1a; 数据范围&#xff1a;0≤n≤2000&#xff0c; 2000肯定到不了&#xff0c;最多到1690&#xff0c;相同题目链接&#xff1a;https://www.lintcode.com…

Dockerfile:自定义镜像

Dockerfile 是一个文本文件&#xff0c;其中包含了一系列用于自动化构建Docker镜像的指令。通过编写Dockerfile&#xff0c;开发者能够明确地定义一个软件应用及其运行环境应该如何被封装进一个可移植、可重复构建的Docker镜像中。 第一步&#xff1a;在/tmp文件下新建docker…

HTTPS握手解析

TLS握手过程 HTTP 由于是明文传输&#xff0c;所谓的明文&#xff0c;就是说客户端与服务端通信的信息都是肉眼可见的&#xff0c;随意使用一个抓包工具都可以截获通信的内容。 存在的风险 窃听风险&#xff0c;比如通信链路上可以获取通信内容&#xff0c;用户号容易没。 篡…

hadoop 查询hdfs资源信息的方式

hdfs dfsadmin -report &#xff3b;-live&#xff3d;&#xff3b;-dead&#xff3d;&#xff3b;-decommissioning&#xff3d;

二分练习题——晾衣服

晾衣服 题目分析 这里出现了“最小化干燥的总时间”&#xff0c;那么可以考虑用二分去做。 第一阶段二段性分析 假设当前需要耗费的时间为mid分钟&#xff0c;如果mid分钟内可以烘干这些衣服&#xff0c;那么我们可以确定右边界大于mid的区间一定也可以。但是此时我需要找的…

前缀和算法(1)

目录 一维前缀和[模板] 一、题目描述 二、思路解析 三、代码 二维前缀和[模板] 一、题目描述 二、思路解析 三、代码 724.寻找数组的中心下标 一、题目描述 二、思路解析 三、代码 238.除自身以外数组的乘积 一、题目描述 二、思路解析 三、代码 一维前缀和[模…

SQLynx发布3.0.0版本:带来更流畅便捷的SQL开发体验

作为新一代的一站式数据库管理开发工具&#xff0c; SQLynx自发布上线以来&#xff0c;一直受到广大用户的好评与鼓励。 为了给用户提供更高效、更便捷、更可靠的数据库管理开发体验&#xff0c;SQLynx今日正式发布3.0.0版本&#xff0c;同步在麦聪软件官网上线&#xff0c;全…

centos 安装 netstat

要在CentOS系统上安装netstat命令&#xff0c;您需要安装名为net-tools的软件包&#xff0c;因为netstat是该包中包含的一个工具。以下是使用系统自带的软件包管理器进行安装的步骤&#xff1a; 对于使用yum的CentOS&#xff08;如CentOS 6或7&#xff09;&#xff1a; # 更新…

【AIGC】阿里云ecs部署stable diffusion

文章目录 安装anaconda安装cudagit 加速配置虚拟环境挂载oss端口开放启动服务其他controlnet显卡使用监控 参考资料 安装anaconda 安装Python、wget、git sudo apt install python3 python3-pip python3-virtualenv wget git 安装前置依赖 sudo apt-get install libgl1-mesa-…

0DAY漏洞是什么,如何进行有效的防护

零日漏洞&#xff0c;指的是软件或系统中未被公开的、未被厂商知晓的安全漏洞。这些漏洞未被修复&#xff0c;因此黑客可以利用它们进行攻击&#xff0c;而受害者往往无法防范。由于这些漏洞的存在时间很短&#xff0c;因此称之为“零日漏洞”&#xff0c;也称为“0day漏洞”。…

VMware ESXi部署macOS Monterey

正文共&#xff1a;1024 字 30 图&#xff0c;预估阅读时间&#xff1a;2 分钟 最早使用黑苹果是在2015年&#xff0c;装在了古老的Acer商务本上&#xff08;老樹發新芽&#xff0c;acer tm 4750g裝黑蘋果&#xff09;&#xff1b;上次安装黑苹果是在两年前&#xff08;VMware…

【爬虫基础】第3讲 常见浏览器User-Agent大全

User-Agent是浏览器或其他网络客户端发送给服务器的HTTP请求头字段&#xff0c;用于告诉服务器客户端的信息&#xff0c;包括操作系统、浏览器等。 以下是一些常见的浏览器User-Agent字符串&#xff1a; Chrome浏览器&#xff1a; Windows&#xff1a;Mozilla/5.0 (Windows NT…

淘宝详情数据采集(商品上货,数据分析,属性详情,价格监控),海量数据值得get

淘宝详情数据采集涉及多个环节&#xff0c;包括商品上货、数据分析、属性详情以及价格监控等。在采集这些数据时&#xff0c;尤其是面对海量数据时&#xff0c;需要采取有效的方法和技术来确保数据的准确性和完整性。以下是一些关于淘宝详情数据采集的建议&#xff1a; 请求示…

显示器刷新率

什么是刷新率以及为什么它很重要&#xff1f;- 英特尔 (intel.cn) 刷新率&#xff1a;显示器更新屏显图片的频率。 显示器每秒绘制新图像的次数。单位&#xff1a;Hz 刷新率为144Hz&#xff0c;指每秒钟刷新图像144次。 需要CPU和GPU能够迅速生成图像。 例如&#xff0c;显…

学习可视化比较好用的网站Apache ECharts

Apache ECharts 是一个基于 JavaScript 的开源可视化图表库&#xff0c;它提供了直观、交互丰富且可高度个性化定制的数据可视化图表。这个库最初由百度团队开源&#xff0c;并在 2018 年初捐赠给了 Apache 基金会&#xff0c;成为 ASF 的孵化级项目。在 2021 年 1 月 26 日&am…

四、在数据库里建库

一、查库 ##1&#xff09;库:一个库就是一个excell文档&#xff0c;库里含有表,一个表就是一个excell的sheet. ##2&#xff09;查看数据库实例中有哪些库 MariaDB [(none)]> show databases; -------------------- | Database | -------------------- | informat…

LabVIEW2024中文版软件安装包、工具包、安装教程下载

下载链接&#xff1a;LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2024安装图文教程》 1、解压后&#xff0c;双击install.exe安装 2、选中“我接受上述许可协议”&#xff0c;点击下一步 3、点击下一步&#xff0c;安装NI Package …