mindscience.e3nn.so2_conv.SO2Convolution
- class mindscience.e3nn.so2_conv.SO2Convolution(irreps_in, irreps_out)[源代码]
面向圆群的复值特征的 SO(2) 等变卷积层。
该层在两个 Irreps 空间之间映射,描述输入/输出在平面旋转下的变换方式。保持 m 量子数(SO(2) 不可约表示的索引)对角不混合,使每个 m 块独立处理。对于 \(m = 0\) (标量部分)使用实值全连接层;对于 \(m > 0\) 使用复值 \(1\times 1\) 卷积(以作用在实/虚部上的实值 \(2\times 2\) 权重矩阵实现)。
- 参数:
irreps_in (Union[str, Irreps]) - 输入不可约表示,例如
"3x0e + 2x1o"(3 个标量 + 2 个向量)。irreps_out (Union[str, Irreps]) - 输出不可约表示,例如
"5x0e + 1x1o"。
- 输入:
x (list[Tensor]) - 实值张量列表,每个张量形状为
(batch, mul, 2l+1),表示每个阶数l的复值 SO(2) 特征;最后一维为磁量子数索引m = -l ... +l。x_edge (Tensor) - 形状为
(edges, features)的实值张量,包含在卷积过程中广播并与 SO(2) 特征结合的边(径向)属性。
- 输出:
tuple (Tensor) - 与
irreps_out中每个 irrep 对应的一组实值张量;每个张量形状为(batch, mul, 2l+1),包含对应阶数l的复值 SO(2) 特征;最后一维为磁量子数索引m = -l ... +l。
样例:
>>> import mindspore as ms >>> from mindscience.e3nn.so2_conv import SO2Convolution >>> conv = SO2Convolution("2x0e + 1x1o", "2x0e + 1x1o") >>> x = [ms.ops.randn(4, 2, 1), ... ms.ops.randn(4, 1, 3)] >>> x_edge = ms.ops.randn(4, 10) >>> out = conv(x, x_edge) >>> len(out), out[0].shape, out[1].shape (2, (4, 2, 1), (4, 1, 3))