einops库中rearrange,reduce和repeat的介绍

人工智能25

用法介绍

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的介绍

相关文章
git branch 分支管理 人工智能

git branch 分支管理

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

如何安装和设置PyTorch

你好,这篇文章咱们讨论一下关于「如何安装和设置PyTorch」的事情... PyTorch安装和设置 PyTorch是一款基于Python的开源机器学习库,它是Torch的一个分支,主要适用于GPU加...
怎样把视频中的音频提取成mp3? 人工智能

怎样把视频中的音频提取成mp3?

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