Closed SvenWeinzierl closed 1 year ago
Hi there,
I tried to calculate fidelity for the GNNExplainer example (https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gnn_explainer.py). In doing that, I got the following error:
raise TypeError("cannot assign '{}' as parameter '{}' " TypeError: cannot assign 'torch.FloatTensor' as parameter '_edge_mask' (torch.nn.Parameter or None expected)
Code:
import os.path as osp import torch import torch.nn.functional as F from torch_geometric.datasets import Planetoid from torch_geometric.explain import Explainer, GNNExplainer, metric from torch_geometric.nn import GCNConv dataset = 'Cora' path = osp.join(osp.dirname(osp.realpath(__file__)), '..', 'data', 'Planetoid') dataset = Planetoid(path, dataset) data = dataset[0] class Net(torch.nn.Module): def __init__(self): super().__init__() self.conv1 = GCNConv(dataset.num_features, 16) self.conv2 = GCNConv(16, dataset.num_classes) def forward(self, x, edge_index): x = F.relu(self.conv1(x, edge_index)) x = F.dropout(x, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = Net().to(device) data = data.to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4) for epoch in range(1, 10): model.train() optimizer.zero_grad() out = model(data.x, data.edge_index) loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step() explainer = Explainer( model=model, algorithm=GNNExplainer(epochs=100), explanation_type='model', node_mask_type='attributes', edge_mask_type='object', model_config=dict( mode='multiclass_classification', task_level='node', return_type='log_probs', ), ) node_index = 10 explanation = explainer(data.x, data.edge_index, index=node_index) print(f'Generated explanations in {explanation.available_explanations}') print(metric.fidelity(explainer, explanation))
conda
pip
torch-scatter
Thanks for reporting. Will be fixed in https://github.com/pyg-team/pytorch_geometric/pull/6510.
🐛 Describe the bug
Hi there,
I tried to calculate fidelity for the GNNExplainer example (https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gnn_explainer.py). In doing that, I got the following error:
raise TypeError("cannot assign '{}' as parameter '{}' " TypeError: cannot assign 'torch.FloatTensor' as parameter '_edge_mask' (torch.nn.Parameter or None expected)
Code:
Environment
conda
,pip
, source):torch-scatter
):