[e3nn] docs | 不可約表示(Irreps)

鏈接:https://docs.e3nn.org/en/latest/examples/examples.html

在這里插入圖片描述


docs:e3nn

e3nn是一個用于構建歐幾里得(E(3))等變神經網絡的Python庫,這意味著它們能自動保持三維旋轉和反射的對稱性。

該庫使用不可約表示(Irreps)來描述數據變換方式,通過張量積以原則性的方式組合這些對稱特征。

此外,該庫還利用球諧函數處理方向性數據,提供專門的等變神經網絡模塊(如線性層和激活函數),包含用于穩定訓練的歸一化策略,并支持TorchScript JIT以實現優化部署。

可視化

在這里插入圖片描述

章節列表

  1. 不可約表示(Irreps)
  2. 球諧函數
  3. 張量積
  4. 等變神經網絡模塊
  5. 歸一化
  6. TorchScript JIT支持

e3nn庫文檔

該庫旨在幫助 開發E(3)等變神經網絡,包含張量積球諧函數等基礎數學運算。

請添加圖片描述

快速入門

import torch
from e3nn import o3# 創建由標量(0e)和向量(1o)組成的隨機數組
irreps_in = o3.Irreps("0e + 1o")
x = irreps_in.randn(-1)# 應用線性層
irreps_out = o3.Irreps("2x0e + 2x1o")
linear = o3.Linear(irreps_in=irreps_in, irreps_out=irreps_out)
y = linear(x)# 計算自張量積
tp = o3.FullTensorProduct(irreps_in1=irreps_in, irreps_in2=irreps_in)
z = tp(x, x)# 可選:編譯張量積運算
tp_pt2 = torch.compile(tp, fullgraph=True)
z_pt2 = tp_pt2(x, x)  # 注意:由于編譯過程,前幾次調用可能較慢
torch.testing.assert_close(z, z_pt2)

安裝指南

重要提示:請先安裝PyTorch,再執行以下命令

pip install --upgrade pip
pip install --upgrade e3nn

詳細安裝說明和可選依賴項請參閱INSTALL.md文件

版本變更說明

e3nn目前處于開發階段。建議使用pip安裝。主分支被視為不穩定版本。當代碼發生破壞性變更時,次版本號會遞增。

版本號格式:
0.(破壞性變更時遞增).(兼容性更新時遞增)


第1章:不可約表示(Irreps)

歡迎來到e3nn的精彩世界🐻???

這個庫能幫助我們構建對三維空間中物體行為"有認知"的神經網絡,特別是在物體旋轉或反射時。

  • 想象訓練一個神經網絡來理解分子。

  • 當你旋轉一個分子時,它仍然是同一個分子!

  • 真正智能的網絡應該能識別這一點,而無需展示所有可能的旋轉。

這種特性被稱為**等變性**,而e3nn使之成為可能。

e3nn的核心是一個稱為不可約表示(簡稱Irreps)的基本概念。

  • 可以將Irreps視為標簽,告訴e3nn你的數據代表哪種物理量

  • 這個標簽至關重要,因為它決定了當三維世界旋轉或反射時,數據應如何表現

讓我們從一個簡單例子開始。假設你有一個球的兩條信息:

  1. 溫度:這是一個單一數字。旋轉球時,其溫度(比如在中心點)不會改變
  2. 位置處的風向和風速:這是一個矢量,既有大小又有方向。旋轉球時,風矢量會隨之改變旋轉。

溫度(標量)和風(矢量)在旋轉下的表現不同。e3nn需要知道這種差異來構建等變神經網絡。這正是Irreps提供的功能

什么是Irrep(單數)?

一個Irrep(發音為"ear-rep")描述一種基本的信息"類型"或"類別",是最小的構建模塊

每個Irrep由兩個關鍵屬性定義:

  1. l(角動量/階數):這是一個非負整數(0,1,2,…)

    • l=0:表示標量。如溫度示例,標量是旋轉坐標系時不變的單一數字。
    • l=1:表示矢量。如風示例,矢量有方向和大小,會隨物體旋轉。
    • l=2及以上:表示更復雜的量,有時稱為張量或多極子,在旋轉下以特定方式變換。

    階數為lIrrep維度總是2l + 1。因此標量(l=0)維度為1,矢量(l=1)維度為3。

  2. p(宇稱):取值為+1(偶,記作’e’)或-1(奇,記作’o’)。宇稱描述數據在反射(如鏡面反射)時的行為:

    • 偶宇稱(e):反射后數據保持不變。標量溫度(0e)具有偶宇稱。
    • 奇宇稱(o):反射后數據符號或方向翻轉。矢量(1o)具有奇宇稱——如果反射一個指向右側的矢量,它將指向左側(其分量符號翻轉)。

e3nn使用簡潔的字符串表示法。例如:

  • 0e:偶宇稱標量(l=0)
  • 1o:奇宇稱矢量(l=1),這是表示3D矢量的標準方式
  • 2e:偶宇稱張量(l=2)

可以在e3nn中這樣創建Irrep對象:

from e3nn.o3 import Irrep# 標量(l=0, 偶宇稱)
scalar_irrep = Irrep("0e")
print(f"標量Irrep: {scalar_irrep}, l={scalar_irrep.l}, p={scalar_irrep.p}, 維度={scalar_irrep.dim}")# 矢量(l=1, 奇宇稱)
vector_irrep = Irrep("1o")
print(f"矢量Irrep: {vector_irrep}, l={vector_irrep.l}, p={vector_irrep.p}, 維度={vector_irrep.dim}")

輸出:

標量Irrep: 0e, l=0, p=1, 維度=1
矢量Irrep: 1o, l=1, p=-1, 維度=3

什么是Irreps(復數)?

現實世界的數據通常不是單一標量或矢量,而是不同類型信息的組合

例如空間中的一個點可能同時具有溫度(標量)和速度(矢量)。

這時就需要Irreps(復數)。Irreps對象描述多個Irrep類型的集合直和,就像是復雜數據結構的配方。

Irreps的字符串表示法組合了單個Irrep字符串,通常帶有"多重性"數字表示特定Irrep類型出現的次數:

  • 1x0e:一個標量(單實例時1x可省略)
  • 2x0e:兩個獨立標量
  • 0e + 1o:一個標量和一個矢量
  • 3x0e + 5x1o + 2x2e三個標量、五個矢量和兩個l=2偶宇稱張量

創建Irreps對象的方式:

from e3nn.o3 import Irreps# 一個標量和一個矢量的組合
my_irreps = Irreps("0e + 1o")
print(f"我的Irreps: {my_irreps}")
print(f"總維度: {my_irreps.dim}")# 更復雜的組合
complex_irreps = Irreps("2x0e + 1x1o + 1x2e")
print(f"復雜Irreps: {complex_irreps}")
print(f"總維度: {complex_irreps.dim}")

輸出:

我的Irreps: 1x0e+1x1o
總維度: 4
復雜Irreps: 2x0e+1x1o+1x2e
總維度: 9

注意complex_irreps的總維度計算為:
(2 * (2*0 + 1))(兩個0e標量) +
(1 * (2*1 + 1))(一個1o矢量) +
(1 * (2*2 + 1))(一個2e張量) =
(2 * 1) + (1 * 3) + (1 * 5) = 2 + 3 + 5 = 10

e3nn如何使用Irreps

Irreps對象本質上是數據在e3nn神經網絡中流動的藍圖。

當在e3nn中定義層時,需要指定其輸入和輸出的Irreps

以下是e3nnREADME中的示例:

import torch
from e3nn import o3# 定義輸入數據的Irreps:一個標量和一個矢量的組合
irreps_in = o3.Irreps("0e + 1o")
print(f"輸入Irreps: {irreps_in}")# 創建符合這些Irreps的隨機輸入數據
x = irreps_in.randn(10, -1) # 10個樣本,-1會被替換為irreps_in.dim(4)
print(f"輸入數據形狀: {x.shape}")# 定義輸出數據的Irreps:兩個標量和兩個矢量的組合
irreps_out = o3.Irreps("2x0e + 2x1o")
print(f"輸出Irreps: {irreps_out}")# 創建將'irreps_in'數據轉換為'irreps_out'數據的線性層
# e3nn確保該層保持旋轉/反射等變性
linear = o3.Linear(irreps_in=irreps_in, irreps_out=irreps_out)
print(f"創建的線性層: {linear}")# 將線性層應用于輸入數據
y = linear(x)
print(f"輸出數據形狀: {y.shape}")

輸出:

輸入Irreps: 1x0e+1x1o
輸入數據形狀: torch.Size([10, 4])
輸出Irreps: 2x0e+2x1o
創建的線性層: Linear(1x0e+1x1o -> 2x0e+2x1o)
輸出數據形狀: torch.Size([10, 8])

注意o3.Linearirreps_inirreps_out為參數。

這告訴層如何解釋其輸入以及應產生何種輸出,同時保持等變性。

內部機制:Irreps的結構

快速了解e3nn如何存儲這些IrrepIrreps對象:

classDiagramdirection LRclass Irrep {+int l+int p+dim: int}class _MulIr {+int mul+Irrep ir+dim: int}class Irreps {+tuple[tuple] internal_structure+dim: int+num_irreps: int}Irreps "1" * "0..*" _MulIr_MulIr "1" * "1" Irrepnote for Irrep: 表示單個不可約表示(如1o)note for _MulIr: 將多重性與Irrep結合(如2x0e)note for Irreps: _MulIr對象的集合(直和)(如2x0e+1x1o)
  1. Irrep:存儲為包含(l, p)的簡單tuple。例如Irrep("1o")內部是(1, -1),其dim屬性計算為2l+1
  2. _MulIr:另一個簡單tuple,包含(多重性, Irrep_object)。所以2x0e會是(2, Irrep(0, 1)),其dim計算為多重性 * Irrep_object.dim
  3. Irreps_MulIr對象的tuple。當給出字符串如Irreps("2x0e + 1x1o")時,它會解析字符串,創建_MulIr(2, Irrep(0, 1))_MulIr(1, Irrep(1, -1)),并將它們存儲在元組中。其dim屬性是所有_MulIr組件維度的總和。

當要求Irreps對象提供其變換矩陣(如通過irreps.D_from_matrix(R))時,e3nn會為每個單獨的Irrep計算變換矩陣(使用稱為wigner_D的函數,我們將在下一章詳細介紹),然后將它們組合成一個大的塊對角矩陣。這種塊對角結構意味著每種Irrep類型獨立變換,這是不可約表示的關鍵特性。

IrrepIrreps快速對比

特性Irrep(單數)Irreps(復數)
概念單一基本的數據變換類型多個Irrep類型的集合或"直和"
屬性l(階數)和p(宇稱)(多重性, Irrep)對的列表
示例0e(標量), 1o(矢量)2x0e + 1o(兩個標量和一個矢量)
維度2l + 1所有組件的多重性 * (2l + 1)之和
用途定義單個組件定義e3nn中數據的整體結構

結論

本章中,我們了解到Irrepse3nn中描述數據(如標量或矢量)在旋轉和反射下行為的基本"標簽"。這種理解對于構建等變神經網絡至關重要,這些網絡本質上尊重3D空間的對稱性。我們學習了如何創建IrrepIrreps對象,以及e3nn如何使用它們來定義其層的輸入和輸出類型。

下一章中,我們將深入探討這些Irreps如何通過球諧函數在3D空間中數學表示,這些函數是表達這些旋轉和反射場的"基"。

第2章:球諧函數


e3nn 概述

e3nn 是一個用于構建歐幾里得等變神經網絡(E(3)-equivariant neural networks)的 Python 庫,能夠自動保持三維旋轉和反射的對稱性

該庫通過不可約表示(Irreps)描述數據變換方式,利用球諧函數處理方向性數據,并提供專門的等變神經網絡模塊。

核心功能

基于不可約表示的數據描述系統

  • 使用 Irreps 定義數據類型(如標量 0e、矢量 1o
  • 支持組合多種數據類型(如 "0e + 1o" 表示標量矢量組合)

基礎數學運算

  • 張量積運算
  • 球諧函數處理

神經網絡組件

  • 等變線性層
  • 歸一化策略
  • TorchScript JIT 支持

應用示例:

  • 分子性質預測
  • 3D 點云處理

前文傳送:[GICP] 點云數據結構 | 點云配準 | KD樹 | 常見樹狀搜索結構

安裝與版本

  • 安裝簡單,但需先安裝 PyTorch
  • 該庫使用版本號 0.X.Y 格式,次版本號遞增表示破壞性變更

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94320.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入淺出 ArrayList:從基礎用法到底層原理的全面解析(中)

四、ArrayList 常用方法實戰 —— 從添加到遍歷的全場景覆蓋ArrayList 提供了數十個方法,但日常開發中常用的只有 10 個左右,我們按 “元素操作”“集合查詢”“遍歷方式” 三類來梳理,每個方法都附帶示例和注意事項。4.1 元素添加&#xff1…

java后端如何實現下載功能

后端需要把要下載的若干文件 按 ZIP 格式編碼成一段二進制字節流,然后以 Content-Type: application/zip Content-Disposition: attachment; filenamexxx.zip 的形式寫進 HTTP 響應體。瀏覽器收到這段“ZIP 格式的字節流”后,就會彈出保存對話框&#xf…

AI生成技術報告:GaussDB與openGauss的HTAP功能全面對比

GaussDB 與 openGauss 的 HTAP 功能比較 前言 GaussDB集中式版本從505.2版本開始引入了HTAP混合負載功能,openGauss也從7.0.0 RC1版本開始引入了HTAP行列融合功能,加強了行存轉列存的使用友好度,但兩者的實現似乎存在不小的差異。 雖然文檔…

小程序開發指南(四)(UI 框架整合)

?講解了微信小程序 UI 框架的使用方法和特點,根據項目需求選擇合適的組件庫。附有相應的組件庫預覽碼,也是將所有的微信小程序原生組件庫整合在一起方便后續開發的使用。如果有不好或者有錯誤的地方請告知!希望可以與大家相互的交流學習&…

golang 1.25.0 安裝

wget https://golang.google.cn/dl/go1.25.0.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.25.0.linux-amd64.tar.gz ln -s /usr/local/go/bin/* /usr/bin/ go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

基于深度學習的人臉表情識別系統:YOLOv5/v6/v7/v8/v10模型實現與UI界面集成

基于YOLOv5/v7/v8的智能人臉表情識別系統:從算法原理到應用實現 表情識別的技術價值與挑戰 人臉表情識別(Facial Expression Recognition, FERYOLOv5/v7/v8等深度學習算法構建高效的表情識別系統,并設計直觀的UI界面集成方案。無論你是深度學習初學者還是有經驗的開發者,…

初步了解多線程

系列文章目錄 目錄 系列文章目錄 前言 一、進程 二、線程 1. 線程解決資源開銷的方式 2. 線程和進程的聯系和區別 三、多線程編程 1. 直觀了解多線程 2. 線程的創建方式 1. 繼承 Thread 重寫 run() 方法 2. 實現 Runable 接口,重寫 run() 方法 3. 繼承 …

安卓Android低功耗藍牙BLE連接異常報錯133

安卓Android低功耗藍牙BLE連接異常報錯133 之前連接一直好好的,不知道為什么今天突然就連接不了藍牙了,報錯133,按照 找網上的說明總是說清除GATT緩存,其實并不是我的問題,最后看到這里https://softs.im/android-ble-%e8%bf%9e%e6%8e%a5%e9%94%99%e8%af%af133/ 有如下說明: 情…

【分治】快排與歸并專題

分治思想 分(Divide):將待排序數組不斷拆分為兩個等長(或近似等長)的子數組,直到子數組長度為 1(天然有序)。 治(Conquer):遞歸排序每個子數組。 …

[Linux]學習筆記系列 -- mm/page_alloc

文章目錄mm/page_alloc.c 伙伴系統內存分配器(Buddy System Memory Allocator) 內核物理內存管理的核心歷史與背景這項技術是為了解決什么特定問題而誕生的?它的發展經歷了哪些重要的里程碑或版本迭代?目前該技術的社區活躍度和主流應用情況如何&#xf…

3秒傳輸大文件:cpolar+Localsend實現跨網絡秒傳

文章目錄前言1. 在Windows上安裝LocalSend2. 安裝Cpolar內網穿透3. 公網訪問LocalSend4. 固定LocalSend公網地址用 cpolar 讓 Localsend 突破距離限制就是這么簡單!三步輕松搞定:在手機和電腦上都安裝 Localsend,在其中一臺設備上運行 cpolar…

基于STM32單片機智能RFID刷卡汽車位鎖樁設計

1 系統功能介紹 本系統是一個 基于 STM32 單片機的智能 RFID 刷卡車位鎖樁控制系統,其設計理念來源于現實中智能停車場的車位鎖樁管理。通過 RFID 刷卡認證、LCD1602 顯示、繼電器控制以及按鍵輔助操作,實現對車位的安全管理。該系統不僅模擬了車輛駛入與…

SQL185 試卷完成數同比2020年的增長率及排名變化

描述現有試卷信息表examination_info(exam_id試卷ID, tag試卷類別, difficulty試卷難度, duration考試時長, release_time發布時間):試卷作答記錄表exam_record(uid用戶ID, exam_id試卷ID, start_time開始作答時間, submit_time交…

網絡編程中的TCP——TCP的連接的建立、關閉、狀態轉移

網絡編程中的TCP——TCP的連接的建立、關閉、狀態轉移 TCP連接的建立和關閉wireshark捕獲數據:TCP三次握手四次揮手的時序圖:三次握手: 報文段1包含SYN標志,這是一個同步報文段,表示發起連接請求,包含自己起…

SQL 語句拼接在 C 語言中的實現與安全性分析

代碼解析 // 構建SQL插入語句 char *sql_insert (char *)malloc(sizeof(char) * 200); // 分配200字節內存 strcpy(sql_insert, "INSERT INTO user(username, passwd) VALUES("); // 復制基礎SQL語句 strcat(sql_insert, ""); // 添加單引號 strcat(sq…

`lock()` 和 `unlock()` 線程同步函數

1) 函數的概念與用途 lock() 和 unlock() 不是特定的標準庫函數,而是線程同步原語的一般概念,用于在多線程環境中保護共享資源。在不同的編程環境和庫中,這些函數有不同的具體實現(如 POSIX 線程的 pthread_mutex_lock() 或 C 的 …

升級openssh后ORACLE RAC EM 安裝失敗處理

升級過程中由于SCP傳輸時目標目錄/tmp/tempRACTrans_2025_08_22--18-25-44-032/ractrans 不存在導致的OC4J配置失敗:WARNING: /usr/bin/scp: dest open "/tmp/tempRACTrans_2025_08_22--18-25-44-032/ractrans": No such file or directory/usr/bin/scp…

ADB 調試工具的學習[特殊字符]

一、ADB 的工作原理 1.1 ADB 概念 ADB (Android Debug Bridge):Android 調試橋,是開發/測試 Android 應用必備的調試工具。作用:通過 電腦終端命令 操作 安卓手機/模擬器。 1.2 ADB 構成與原理 ADB 由三部分組成: Client 端&#…

用一根“數據中樞神經”串起業務從事件流到 Apache Kafka

1. 為什么是“事件流”? 在一個軟件定義、自動化、永遠在線的世界里,系統之間最需要的是:把發生了什么這件事,第一時間、按正確順序、可靠地傳到該知道的人/系統那里。 事件流就像企業的中樞神經:它把數據庫更新、設備…

【RAGFlow代碼詳解-4】數據存儲層

數據庫基礎設施 RAGFlow 使用關系數據庫(MySQL 或 PostgreSQL)作為主要元數據存儲,通過具有連接池和重試機制的 Peewee ORM 進行管理。 連接管理 數據庫連接通過 service_conf.yaml 和環境變量進行配置。該系統支持具有可配置連接池的 MySQL …