arogozhnikov/einops
Flexible and powerful tensor operations for readable and reliable code (for pytorch, jax, TF and others)
解决的问题
einops 提供了一种灵活且强大的张量操作方式,使代码更具可读性、可靠性,并与框架无关。它用一种清晰、语义化的记法取代了复杂且常令人困惑的重塑、转置和归约操作,明确描述了操作的目的(在做什么),而非实现方式(如何计算)。
工作原理
该库使用受爱因斯坦启发的记法来描述张量变换。用户不再使用框架特定的函数(如 .view() 或 .reshape()),而是通过指定模式字符串(例如 'b c h w -> b (c h w)')来重新排列、缩减或重复元素。
核心操作包括:
- Rearrange:根据模式改变元素的布局。
- Reduce:将重新排列和归约(例如使用 'mean' 或 'max')合并为一步操作。
- Repeat:沿新轴复制元素。
- Pack/Unpack:可逆地将多个张量打包成一个,适用于处理不同维度的数据。
- Einsum:支持多字母名称的灵活点积操作。
它还提供针对特定框架(如 PyTorch、TensorFlow、Jax)的层,可直接集成到模型架构中作为层使用。
适用人群
使用 PyTorch、TensorFlow、JAX、MLX 和 NumPy 等深度学习框架,频繁操作多维张量,并希望避免错误、提升代码可维护性的研究人员和开发者。
主要亮点
- 语义清晰:模式描述输入和输出形状,为张量的含义提供内置文档。
- 框架无关:在 NumPy、PyTorch、TensorFlow、JAX、MLX 以及任何支持 Python 数组 API 标准的框架中均能一致运行。
- 统一性:提供统一方式处理 1D、2D、3D 池化或空间到深度转换等复杂操作。
- 可靠检查:可在模式中指定特定维度,自动验证输入张量的形状。
- 引用:项目有 ICLR 2022 口头报告论文可供引用。
相关
- 项目
- 项目
- 项目
- 项目