39 lines
1.1 KiB
Markdown
39 lines
1.1 KiB
Markdown
# EiX-GNN
|
|
|
|
|
|
Official implementation of EiXGNN algorithm. For further informations, see [EiX-GNN: Concept-level eigencentrality explainer for graph neural networks, paper](https://arxiv.org/abs/2206.03491).
|
|
|
|
## Run an example
|
|
|
|
```python
|
|
from torch_geometric.datasets import TUDataset
|
|
|
|
dataset = TUDataset(root="/tmp/ENZYMES", name="ENZYMES")
|
|
data = dataset[0]
|
|
|
|
import torch.nn.functional as F
|
|
from torch_geometric.nn import GCNConv, global_mean_pool
|
|
from eixgnn.eixgnn import EiXGNN
|
|
|
|
class GCN(torch.nn.Module):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.conv1 = GCNConv(dataset.num_node_features, 20)
|
|
self.conv2 = GCNConv(20, dataset.num_classes)
|
|
|
|
def forward(self, data):
|
|
x, edge_index, batch = data.x, data.edge_index, data.batch
|
|
x = self.conv1(x, edge_index)
|
|
x = F.relu(x)
|
|
x = global_mean_pool(x, batch)
|
|
x = F.softmax(x, dim=1)
|
|
return x
|
|
|
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
|
model = GCN().to(device)
|
|
model.eval()
|
|
data = dataset[0].to(device)
|
|
explainer = EiXGNN()
|
|
explained = explainer.forward(model, data.x, data.edge_index)
|
|
```
|