用法介绍
einops是一个简洁优雅操作张量的库,并且支持对numpy,pytorch,tensorflow中的张量进行操作,该库最大的优点是函数的使用逻辑清晰明了,其中中常用的三个函数分别是rearrange,repeat,reduce。
- rearrange: 用于对张量的维度进行重新变换排序,可用于替换pytorch中的reshape,view,transpose和permute等操作
- repeat: 用于对张量的某一个维度进行复制,可用于替换pytorch中的repeat
- reduce: 类似于tensorflow中的reduce操作,可以用于求平均值,最大最小值的同时压缩张量维度
einops中rearrange,repeat,reduce的函数细节介绍如下所示
def rearrange(inputs, pattern, **axes_lengths)⟶ \longrightarrow ⟶ transform_inputs
- inputs (tensor): 表示输入的张量
- pattern (str): 表示张量维度变换的映射关系
- axes_lengths**: 表示按照指定的规格形式进行变换
def repeat(inputs, pattern, **axes_lengths)⟶ \longrightarrow ⟶ transform_inputs
- inputs (tensor): 表示输入的张量
- pattern (str): 表示张量按照某个维度复制的映射关系
- axes_lengths**: 表示按照指定的规格形式进行复制
def reduce(inputs, pattern, reduction, **axes_lengths)⟶ \longrightarrow ⟶ transform_inputs
- inputs (tensor): 表示输入的张量
- pattern (str): 表示张量执行某种运算做操作后维度变换的映射关系
- reduction (str): 表示运算操作的类型,分别有'max','min','sum','mean','prod'
- axes_lengths**: 表示按照指定的规格形式进行运算操作
代码示例
einops库中rearrange函数的代码示例如下所示
>>> images = [np.random.randn(30, 40, 3) for _ in range(32)]
>>> rearrange(images, 'b h w c -> b h w c').shape
(32, 30, 40, 3)
>>> rearrange(images, 'b h w c -> (b h) w c').shape
(960, 40, 3)
>>> rearrange(images, 'b h w c -> h (b w) c').shape
(30, 1280, 3)
>>> rearrange(images, 'b h w c -> b c h w').shape
(32, 3, 30, 40)
>>> rearrange(images, 'b h w c -> b (c h w)').shape
(32, 3600)
>>> rearrange(images, 'b (h1 h) (w1 w) c -> (b h1 w1) h w c', h1=2, w1=2).shape
(128, 15, 20, 3)
>>> rearrange(images, 'b (h h1) (w w1) c -> b h w (c h1 w1)', h1=2, w1=2).shape
(32, 15, 20, 12)
einops库中repeat函数的代码示例如下所示
>>> image = np.random.randn(30, 40)
>>> repeat(image, 'h w -> h w c', c=3).shape
(30, 40, 3)
>>> repeat(image, 'h w -> (repeat h) w', repeat=2).shape
(60, 40)
>>> repeat(image, 'h w -> h (repeat w)', repeat=3).shape
(30, 120)
>>> repeat(image, 'h w -> (h h2) (w w2)', h2=2, w2=2).shape
(60, 80)
>>> downsampled = reduce(image, '(h h2) (w w2) -> h w', 'mean', h2=2, w2=2)
>>> repeat(downsampled, 'h w -> (h h2) (w w2)', h2=2, w2=2).shape
(30, 40)
einops库中reduce函数的代码示例如下所示
>>> x = np.random.randn(100, 32, 64)
>>> y = reduce(x, 't b c -> b c', 'max')
>>> y = reduce(x, 'time batch channel -> batch channel', 'max')
>>> x = np.random.randn(10, 20, 30, 40)
>>> y1 = reduce(x, 'b c (h1 h2) (w1 w2) -> b c h1 w1', 'max', h2=2, w2=2)
>>> y2 = rearrange(y1, 'b (c h2 w2) h1 w1 -> b c (h1 h2) (w1 w2)', h2=2, w2=2)
>>> assert parse_shape(x, 'b _ h w') == parse_shape(y2, 'b _ h w')
>>> reduce(x, 'b c (h1 h2) (w1 w2) -> b c h1 w1', 'max', h1=3, w1=4).shape
(10, 20, 3, 4)
>>> reduce(x, 'b c h w -> b c', 'mean').shape
(10, 20)
>>> y = x - reduce(x, 'b c h w -> () c () ()', 'mean')
>>> y = x - reduce(x, 'b c h w -> b c () ()', 'mean')
Original: https://blog.csdn.net/qq_38406029/article/details/122322166
Author: 鬼道2022
Title: einops库中rearrange,reduce和repeat的介绍
相关文章

【期末划重点】数据挖掘
数据挖掘重点 1、第一章 2、第二章 3、第三章 * 3.1ID3算法 3.2 C4.5算法 3.3 CART算法 ==(基尼系数)== 3.4 贝叶斯 定理 3.6 K-最近邻(KNN) 4、第四章...

树莓派python3.7.3安装opencv、TensorFlow2.3
树莓派python3.7.3安装opencv、TensorFlow2.3 不喜勿喷,如果有说错,可以在评论区指出,谢谢。 安装opencv 树莓派本身就自带python2.7和3.7版本,我是卸载了2...

树莓派-智能家居-扩展是wemosD1
目录 1、主函数 mainPro.c 2、分文件(所有的外设设备都是对象) bathroomLight.c (浴室灯) livingroomLight.c (睡房灯) restaurantLight....

使用交叉熵(CrossEntropyLoss)做多分类问题最后一层是否使用softmax
最近在一个自己的数据集上做多分类问题,使用的是CrossEntropyLoss作为loss,但是训练效果一直不好。就疯狂找问题,快二十天了,未果。昨天在github上找了一段代码,移植之后。训练居然有...

记录之使用3080ti运行tensorflow-gpu=1.x版本的源码
环境:Anaconda3,ubuntu18.04,RTX3080ti,python3.7 RTX3080ti显卡是当前市面上比较新的,算力比较强的显卡,且 这类显卡采用了安培架构仅支持cuda11.x...

git branch 分支管理
在多人协作的情况下,master通常是稳定的分支.可以再建一些"develop","testing"等名称的分支.主管master的人做开发的话最好也建立自己的分支. 命令操作 git branch ...

【语音编码】基于matlab LPC编解码【含Matlab源码 554期】
⛄一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【语音编码】基于matlab LPC编解码【含Matlab源码 554期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费...

如何安装和设置PyTorch
你好,这篇文章咱们讨论一下关于「如何安装和设置PyTorch」的事情... PyTorch安装和设置 PyTorch是一款基于Python的开源机器学习库,它是Torch的一个分支,主要适用于GPU加...

Jupyter notebook运行失败问题——无法运行及内核不可信(附修改默认打开界面)
问题描述 通过命令行或可视化界面进入notebook,无法识别其他环境的notebook+识别内核但无法运行代码。 问题背景及分析 事后分析: 刚开始安装notebook使用的是anaconda可视化...

Mathematica 13 for Mac(功能广泛的科学计算软件)中文
如果您还为数学计算的繁琐,函数作图的费事,所画图形的不规范二烦恼的话,那么您真的需要这款Mathematica 13 for Mac(科学计算软件),是Mac平台上致力于科学计算的软件,很好地结合了数...

Python用KShape对时间序列进行聚类和肘方法确定最优聚类数k可视化
啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可以到 建议专区 反馈...

pip:你真的熟悉怎么用了吗?
1、添加pip源 C:\Users\matebook\AppData\Roaming\pip 在这个路径下创建pip文件夹(默认没有) 在文件夹里面新建一个 pip.ini文件 打开这个文件,输入如下...

Adaptive Clustering-based Malicious TrafficClassification at the Network Edge论文阅读笔记
基于自适应聚类的网络边缘恶意流量分类 -论文笔记 综述: 在本文中,提出了一种 基于自适应聚类的入侵检测(ACID),这是一种新的 恶意流量分类方法,也是一种 部署在网络边缘的有效候选方法。该模型由引...

怎样把视频中的音频提取成mp3?
视频由由音频和图像组成,有时我们在观看一些视频时,经常会听到一些非常好听的背景音乐,想要保存成mp3 时,发现很多音乐平台要么是付费下载的,要么就是没有合适的版本,那么如何把视频里的背景音乐提取出来呢...

Tensorflow2.0学习-保存和加载模型 (五)
文章目录 保存加载模型 * 引包 数据准备 模型准备 跑起来并保存模型 加载模型 checkpoint 回调选项 保存模型的另外一些方式 - SaveModel文件格式 HDF5 文件格式 保存加载模...