これは、私たちの論文で説明されているように、グラフ内のノードの(半監視)分類のタスクのためのグラフ畳み込みネットワークのテンソルフロー実装です。
Thomas N. Kipf、Max Welling、Graph Convolution Networksを使用した半監視分類(ICLR 2017)
高レベルの説明については、ブログ投稿をご覧ください。
Thomas KIPF、グラフ畳み込みネットワーク(2016)
python setup.py install
cd gcn
python train.py
独自のデータを使用するには、提供する必要があります
例として、 utils.py
のload_data()
関数をご覧ください。
この例では、引用ネットワークデータ(Cora、Citeseer、またはPubMed)をロードします。元のデータセットは、http://www.cs.umd.edu/~sen/lbc-proj/lbc.htmlにあります。バージョン( data
フォルダーを参照)では、https://github.com/kimiyoung/planetoid(Zhilin Yang、William W. Cohen、Ruslan Salakhutdinovが提供するデータセットスプリットを使用します。
次のようにデータセットを指定できます。
python train.py --dataset citeseer
(またはtrain.py
を編集することで)
次のモデルから選択できます。
gcn
:グラフ畳み込みネットワーク(Thomas N. KIPF、Max Welling、Graph Convolution Networksを使用した半監視分類、2016年)gcn_cheby
:Chebyshev Polynomialバージョングラフ畳み込みネットワークのバージョン(MichaëlDefferrard、Xavier Bresson、Pierre Vandergheynst、高速局在スペクトルフィルタリング付きグラフ上の畳み込みニューラルネットワーク、NIPS 2016)dense
:まばらな入力をサポートする基本的な多層パーセプトロン私たちのフレームワークは、それぞれ隣接するマトリックスを使用して(潜在的に異なるサイズの)複数のグラフインスタンスのバッチごとの分類もサポートしています。それぞれの特徴マトリックスを連結し、各ブロックが1つのグラフインスタンスの隣接マトリックスに対応する(スパース)ブロック対角マトリックスを構築することをお勧めします。プーリングの場合(ノードレベルの出力とは対照的にグラフレベルの出力の場合)、以下に示すように、それぞれのグラフインスタンスから機能を収集する単純なプーリングマトリックスを指定することをお勧めします。
あなたがあなた自身の仕事でこのコードを使用している場合、私たちの論文を引用してください:
@inproceedings{kipf2017semi,
title={Semi-Supervised Classification with Graph Convolutional Networks},
author={Kipf, Thomas N. and Welling, Max},
booktitle={International Conference on Learning Representations (ICLR)},
year={2017}
}