GNN実装・超入門 -小話:有効グラフと無効グラフの定義-
最近GNNに惹かれてます.
現在も,自分のシステムの機構の一部にR-GCNを使っているのですが,きちんと理解しようと以下で勉強し直しています.
・グラフニューラルネットワーク: PyTorchによる実装
・PyG公式ドキュメント
pytorch-geometric.readthedocs.io
今日は地味につまった,PyGによる有効グラフと無効グラフの定義についです.
公式ドキュメントによると無効グラフの定義ってこれなんですが,
import torch from torch_geometric.data import Data edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long) x = torch.tensor([[-1], [0], [1]], dtype=torch.float) data = Data(x=x, edge_index=edge_index) >>> Data(edge_index=[2, 4], x=[3, 1])
「ん,,この定義の仕方↓って有効グラフじゃないの???方向あるじゃん,,」と疑問に思い,地味に進めませんでした.
edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long)
結論,PyGでは「エッジの両端を入れ替えたものは同じエッジとして扱われるため、この定義の仕方で無効グラフとして扱われる」ようです(間違っていたらご指摘ください)
諸々確認してみました.
◎無効グラフの場合
import torch
from torch_geometric.data import Data
[1, 0, 2, 1]], dtype=torch.long)
data = Data(x=x, edge_index=edge_index)
#エッジ数の確認と,有効グラフかどうかの判定
#エッジ数の確認と,有効グラフかどうかの判定
print(data.num_edges)
print(data.is_directed())
>>2
>>False
おお,確かに,エッジ数が重複が削除されて4→2,そして,無効グラフであることを示すFalseになっています.
◎有効グラフの場合
data = Data(x=x, edge_index=edge_index)
#エッジ数の確認と,有効グラフかどうかの判定
print(data.num_edges)
print(data.is_directed())
>>4
>>True
有効グラフの場合はエッジ数がそのまま4で,きちんと表示もTrueです.
少しつまったので,記しておきます.