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 口頭報告論文可供引用。
相關
- 專案
- 專案
- 專案
- 專案