EGNNConv

class dgl.nn.pytorch.conv.EGNNConv(in_size, hidden_size, out_size, edge_feat_size=0)[source]

Bases: Module

来自E(n) 等变图神经网络的等变图卷积层

\[ \begin{align}\begin{aligned}m_{ij}=\phi_e(h_i^l, h_j^l, ||x_i^l-x_j^l||^2, a_{ij})\\x_i^{l+1} = x_i^l + C\sum_{j\in\mathcal{N}(i)}(x_i^l-x_j^l)\phi_x(m_{ij})\\m_i = \sum_{j\in\mathcal{N}(i)} m_{ij}\\h_i^{l+1} = \phi_h(h_i^l, m_i)\end{aligned}\end{align} \]

其中 \(h_i\), \(x_i\), \(a_{ij}\) 分别是节点特征、坐标特征和边特征。\(\phi_e\), \(\phi_h\), 和 \(\phi_x\) 是两层的多层感知机。\(C\) 是用于归一化的常数,计算为 \(1/|\mathcal{N}(i)|\)

Parameters:
  • in_size (int) – 输入特征大小;即 \(h_i^l\) 的大小。

  • hidden_size (int) – 隐藏特征大小;即在两层MLPs中隐藏层的大小,用于 \(\phi_e, \phi_x, \phi_h\)

  • out_size (int) – 输出特征大小;即 \(h_i^{l+1}\) 的大小。

  • edge_feat_size (int, optional) – 边特征大小;即 \(a_{ij}\) 的大小。默认值:0。

示例

>>> import dgl
>>> import torch as th
>>> from dgl.nn import EGNNConv
>>>
>>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
>>> node_feat, coord_feat, edge_feat = th.ones(6, 10), th.ones(6, 3), th.ones(6, 2)
>>> conv = EGNNConv(10, 10, 10, 2)
>>> h, x = conv(g, node_feat, coord_feat, edge_feat)
forward(graph, node_feat, coord_feat, edge_feat=None)[source]

Description

计算EGNN层。

param graph:

图表。

type graph:

DGLGraph

param node_feat:

输入特征的形状为 \((N, h_n)\)\(N\) 是节点的数量,\(h_n\) 必须与 in_size 相同。

type node_feat:

torch.Tensor

param coord_feat:

形状的坐标特征为 \((N, h_x)\)。其中 \(N\) 是节点的数量,而 \(h_x\) 可以是任何正整数。

type coord_feat:

torch.Tensor

param edge_feat:

形状的边缘特征 \((M, h_e)\)\(M\) 是边的数量,\(h_e\) 必须与 edge_feat_size 相同。

type edge_feat:

torch.Tensor, 可选的

returns:
  • node_feat_out (torch.Tensor) – 输出节点特征,形状为 \((N, h_n')\),其中 \(h_n'\) 与 out_size 相同。

  • coord_feat_out (torch.Tensor) – 输出坐标特征的形状为 \((N, h_x)\),其中 \(h_x\) 与输入坐标特征的维度相同。