C.1 einops简介

张量(Tensor)操作是机器学习、深度学习中的常用操作,这些操作在
NumPy、Tensorflow、PyTorch、Mxnet、Paddle等框架都有相应的函数。比如PyTorch中的review,transpose,permute等操作。
einops是提供常用张量操作的Python包,支持NumPy、Tensorflow、PyTorch等框架,可以与这些框架有机衔接。其功能涵盖了reshape、view、transpose和permute等操作。其特点是可读性强、易维护,如变更轴的顺序的操作。

einops可用pip安装

einops的常用函数:rearrange, reduce, repeat

C.1.1 rearrange

rearrange只改变形状,但不改变元素总个数,其功能涵盖transpose, reshape, stack, concatenate, squeeze 和expand_dims等。
1、导入需要的库

2、自动可视化arrays数据

3、导入测试数据
数据文件下载地址:https://github.com/arogozhnikov/einops/tree/master/docs/resources

(1)测试数据

 

(2)显示第2张图

4、交互维度

5、轴的拼接
涵盖Stack and concatenate等功能。

6、轴的拆分
(1)拆分batch轴

(2)拆分与拼接(concatenate)

(3)对width轴进行拆分

7、重新拼接轴

8、沿轴增加或减少一个维度
覆盖这些函数的功能:Squeeze and unsqueeze (expand_dims)

(6, 1, 96, 96, 1, 3)
(6, 96, 96, 3)

C.1.2 reduce

沿轴求平均值,最大值、最小值等。

C.1.3 repeat

在某轴上重复n次。

C.2 作为pytorch的layer来使用

Rearrange是nn.module的子类,直接可以当作pytorch网络层放到模型里。

C.2.1 展平

这个代码与下代码等价

C.2.2 使用einops可大大简化PyTorch代码

1、构建模型

2、代码1与下面这个代码等价

C.2.3 构建注意力模型

这段代码与下列代码等价