Python - Einops
Table of Contents
Einstein-inspired notation for operations (Einops1) is a python package which provides extremely flexible and powerful opertions on tensors, e.g., permuting/reordering, reshaping (combining and partitioning along axes), reducing, repeating. Moreover, it supports numpy, tensorflow, pytorch, etc.
Installation
Einops can be directly installed from pypi.
pip install einops
Usage
Basic functions
Basically, Einops provides 3 Functions, rearrange
, reduce
, repeat
, which can be imported by
from einops import rearrange, reduce, repeat rearrange(tensor, pattern: str, **axes_lengths) reduce(tensor: ~Tensor, pattern: str, reduction: Union[str, Callable[[~Tensor, List[int]], ~Tensor]], **axes_lengths: int) -> ~Tensor repeat(tensor: ~Tensor, pattern: str, **axes_lengths) -> ~Tensor
tensor
is a tensor (e.g.,numpy.ndarray
,tensorflow
,pytorch
) or a list of tensors with the same type and shape.pattern
is a string indicating rearrangement/reduction pattern.reduction
can be one of'max'
,'min'
,'mean'
,'sum'
,'prod'
.axes_lengths
are dimension related specifications.
rearrange
rearrange
does not change the number of elements inside, and can achieve the operations like transpose, reshape, stack, squeeze, unsqueeze, concatenate, etc.
reduce
reduce
combines elements in one or more axes. So it reduces the total number of elements, but keeps the ordering.
repeat
repeat
produces repetition and tiling.
Layers
Einops also provides two corresponding layers, which can be directly integrated into any neural network.
from einops.layers.chainer import Rearrange, Reduce from einops.layers.gluon import Rearrange, Reduce from einops.layers.keras import Rearrange, Reduce from einops.layers.torch import Rearrange, Reduce from einops.layers.tensorflow import Rearrange, Reduce
Taking pytorch for instace, a Rearrange
layer or a Reduce
layer can be generated by
Rearrange(pattern, **axes_lengths) Reduce(pattern, reduction, **axes_lengths)