Hi everyone!
I have a error with a dimension. I can’t identify where the problem is, I’ve been checking all the inputs and outputs and I can’t understand the reason for “IndexError: index 4359 is out of bounds for dimension 0 with size 4357”.
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-747-5046fcafc8d6> in <module>
2 model.eval()
3
----> 4 out = model(data.x, data.edge_index)
5 #visualize(out, color = data.y)
~\anaconda3\lib\site-packages\torch\nn\modules\module.py in _call_impl(self, *input, **kwargs)
725 result = self._slow_forward(*input, **kwargs)
726 else:
--> 727 result = self.forward(*input, **kwargs)
728 for hook in itertools.chain(
729 _global_forward_hooks.values(),
<ipython-input-745-449b43994269> in forward(self, x, edge_index)
11 print(x.shape)
12 print(edge_index.shape)
---> 13 x = self.conv1(x, edge_index)
14 x = x.relu()
15 x = F.dropout(x, p=0.5, training = self.training)
~\anaconda3\lib\site-packages\torch\nn\modules\module.py in _call_impl(self, *input, **kwargs)
725 result = self._slow_forward(*input, **kwargs)
726 else:
--> 727 result = self.forward(*input, **kwargs)
728 for hook in itertools.chain(
729 _global_forward_hooks.values(),
~\anaconda3\lib\site-packages\torch_geometric\nn\conv\gcn_conv.py in forward(self, x, edge_index, edge_weight)
158 cache = self._cached_edge_index
159 if cache is None:
--> 160 edge_index, edge_weight = gcn_norm( # yapf: disable
161 edge_index, edge_weight, x.size(self.node_dim),
162 self.improved, self.add_self_loops)
~\anaconda3\lib\site-packages\torch_geometric\nn\conv\gcn_conv.py in gcn_norm(edge_index, edge_weight, num_nodes, improved, add_self_loops, dtype)
54
55 if add_self_loops:
---> 56 edge_index, tmp_edge_weight = add_remaining_self_loops(
57 edge_index, edge_weight, fill_value, num_nodes)
58 assert tmp_edge_weight is not None
~\anaconda3\lib\site-packages\torch_geometric\utils\loop.py in add_remaining_self_loops(edge_index, edge_weight, fill_value, num_nodes)
132 remaining_edge_weight = edge_weight[inv_mask]
133 if remaining_edge_weight.numel() > 0:
--> 134 loop_weight[row[inv_mask]] = remaining_edge_weight
135 edge_weight = torch.cat([edge_weight[mask], loop_weight], dim=0)
136
IndexError: index 4359 is out of bounds for dimension 0 with size 4357
As an example the following code:
edge_index = torch.tensor(edge_train, dtype = torch.long)
y = torch.tensor(target_train, dtype = torch.long)
x = torch.tensor(data_train, dtype = torch.long)
data = Data(x = x, edge_index = edge_index, y = y)
data
Output:
Data(edge_index=[2, 85325], x=[4357, 2790], y=[4357])
class GCN(torch.nn.Module):
def __init__(self, hidden_channels):
super(GCN, self).__init__()
num_classes = 1
num_features = 2790
self.conv1 = GCNConv(num_features, hidden_channels)
self.conv2 = GCNConv(hidden_channels, num_classes)
def forward(self, x, edge_index):
print(x.shape)
print(edge_index.shape)
x = self.conv1(x, edge_index)
x = x.relu()
x = F.dropout(x, p=0.2, training = self.training)
x = self.conv2(x, edge_index)
return x
model = GCN(hidden_channels=512)
model.eval()
out = model(data.x, data.edge_index)
Some dimensions obtained are:
**out.shape:** torch.Size([4357])
**data.y.shape:** torch.Size([4357])
**data.edge_index.shape:** torch.Size([2, 85325])
**data.x.shape:** torch.Size([4357, 2790])
Any idea?. I very much appreciate the comments or suggestions.
Greetings