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

相關

  • 專案
  • 專案
  • 專案
  • 專案