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' を使用)を1ステップで行います。
- Repeat:新しい軸に沿って要素をコピーします。
- Pack/Unpack:複数のテンソルを1つに逆転可能にパックする機能で、異なる次元を持つデータの扱いに便利です。
- Einsum:複数の文字名をサポートする柔軟なドット積演算です。
また、PyTorch、TensorFlow、Jax などのフレームワーク固有のレイヤーも提供しており、モデルアーキテクチャに直接統合できます。
対象ユーザー
PyTorch、TensorFlow、JAX、MLX、NumPy などのディープラーニングフレームワークで多次元テンソルを頻繁に操作し、バグを避け、コードの保守性を高めたい研究者や開発者。
特徴
- 意味の明確さ:パターンは入力と出力の形状を記述し、テンソルの意味に関する組み込みドキュメントを提供します。
- フレームワーク非依存:NumPy、PyTorch、TensorFlow、JAX、MLX、およびPython配列API標準をサポートするすべてのフレームワークで一貫して動作します。
- 一貫性:1D、2D、3Dのプーリングや、空間から深さへの変換のような複雑な操作を一貫した方法で扱えます。
- 信頼性の高い検証:パターンに特定の次元を指定することで、入力テンソルの形状を自動的に検証できます。
- 引用:本プロジェクトのICLR 2022 Oral発表論文が利用可能です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト