DGL Basics(グラフの作成やノードやエッジの読み書き)|DGL(Deep Graph Library)を動かす #3

f:id:lib-arts:20200310164728p:plain

 

当シリーズでは、DGL(Deep Graph Library)について確認していきます。

Overview of DGL — DGL 0.4.2 documentation

#1ではDGLのドキュメントを元にインストールと動作事例の確認について、#2では#1の題材における重要ポイントの詳細の確認について行いました。

#3ではドキュメントより、"DGL Basics"を読み進めていきます。

f:id:lib-arts:20200310164757p:plain

DGL Basics — DGL 0.4.2 documentation

上記が冒頭部の記載ですが、「このチュートリアルでは、グラフの作成やノードやエッジの読み書きについて学べる」とされています。詳しくは下記で確認していきます。
以下、目次になります。(チュートリアルの目次に準じています)
1. Creating a graphについて
2. Assigning a featureについて
3. Working with multigraphsについて
4. まとめ


1. Creating a graphについて
1節ではCreating a graphの項目について確認していきます。

f:id:lib-arts:20200310165312p:plain

上記では「DGLGraphの設計はNetworkXに基づいて行われており、NetworkXの形式からDGLGraphの形式に変換する」と記載されています。

f:id:lib-arts:20200310165551p:plain

記載のコードを実行すると上記のようになります。dgl.DGLGraph(g_nx)のところでNetworkXの形式をDGLGraphの形式に変換しています。また、g_dgl.to_networkx()のところでDGLGraphの形式をNetworkXの形式に変換を行なっています。また、それぞれの違いとしては、NetworkXのところでは無向グラフになっていたのが、DGLGraphの形式を経ることで有向グラフの形式に変わっていることが確認できます。NetworkXについては以前のシリーズでもまとめたので、下記も参考にしていただけたらと思います。

NetworkX カテゴリーの記事一覧 - Liberal Art’s diary

引き続きチュートリアルを読み進めます。

f:id:lib-arts:20200310170405p:plain

上記では、DGLのインターフェースを用いたグラフの作成について記載されています。add_nodesでノードの追加、add_edgesでエッジが追加できると抑えておけば一旦十分かと思います。

f:id:lib-arts:20200310170449p:plain
コードの実行結果は上記のようになります。チュートリアルがここまでなので1節はここまでとします。


2. Assigning a featureについて
2節ではAssigning a featureの項目について確認していきます。

f:id:lib-arts:20200310171054p:plain

上記では、「DGLGraph形式のノードやエッジに特徴量をわりあてることができる」と記載されています。また注意書きとして、PyTorchやMXNetの配列(tensors)の形式を用いており、このチュートリアルではPyTorchを用いているとされており、コードでもimport torch as thが記載されています。

f:id:lib-arts:20200310171627p:plain

コードの実行結果は上記のようになっています。基本的にPyTorchのtensorの形式がベースとなっており、様々な配列操作についての確認を行なっています。

f:id:lib-arts:20200310172200p:plain
上記ではノードに引き続き、エッジについて説明されています。

f:id:lib-arts:20200310172246p:plain

コードの実行結果は上記のようになります。


3. Working with multigraphsについて
一旦省略します。


4. まとめ
#3ではドキュメントより、"DGL Basics"について確認しました。
#4では同じくドキュメントより、"PageRank with DGL message passing"について確認します。

PageRank with DGL message passing — DGL 0.4.2 documentation