PyTorch Geometric

PyTorch Geometric または PyG は、最も人気のある幾何学的ディープラーニングのためのライブラリの1つであり、W&B はそれと非常に良く連携し、グラフの可視化と実験の追跡を行うことができます。

PyTorch Geometric をインストールした後、以下の手順に従ってください。

サインアップとAPI キーの作成

APIキーは、あなたのマシンをW&Bに認証します。APIキーはユーザープロフィールから生成できます。

  1. 右上のユーザープロフィールアイコンをクリックします。
  2. ユーザー設定を選択し、API キーセクションまでスクロールします。
  3. Reveal をクリックします。表示されたAPIキーをコピーします。APIキーを隠すには、ページをリロードしてください。

wandb ライブラリのインストールとログイン

wandb ライブラリをローカルにインストールし、ログインするには:

  1. WANDB_API_KEY 環境変数 をAPIキーに設定します。

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb ライブラリをインストールし、ログインします。

    pip install wandb
    
    wandb login
    
pip install wandb
import wandb
wandb.login()
!pip install wandb

import wandb
wandb.login()

グラフの可視化

入力グラフの詳細(エッジ数、ノード数など)を保存できます。W&B は plotly グラフと HTML パネルのログ記録をサポートしているため、グラフのために作成したあらゆる可視化を W&B にログすることができます。

PyVis を使用する

以下のスニペットは、PyVis と HTML を使ってそれを行う方法を示しています。

from pyvis.network import Network
import wandb

wandb.init(project=graph_vis)
net = Network(height="750px", width="100%", bgcolor="#222222", font_color="white")

# PyG グラフから PyVis ネットワークへのエッジを追加
for e in tqdm(g.edge_index.T):
    src = e[0].item()
    dst = e[1].item()

    net.add_node(dst)
    net.add_node(src)
    
    net.add_edge(src, dst, value=0.1)

# PyVisの可視化をHTMLファイルに保存
net.show("graph.html")
wandb.log({"eda/graph": wandb.Html("graph.html")})
wandb.finish()
この画像は、インタラクティブな HTML 可視化として入力グラフを示しています。

Plotly を使用する

Plotly を使用してグラフの可視化を作成するには、まず PyG グラフを networkx オブジェクトに変換する必要があります。その後、ノードとエッジのために Plotly スキャッタープロットを作成する必要があります。このタスクには以下のスニペットが使用できます。

def create_vis(graph):
    G = to_networkx(graph)
    pos = nx.spring_layout(G)

    edge_x = []
    edge_y = []
    for edge in G.edges():
        x0, y0 = pos[edge[0]]
        x1, y1 = pos[edge[1]]
        edge_x.append(x0)
        edge_x.append(x1)
        edge_x.append(None)
        edge_y.append(y0)
        edge_y.append(y1)
        edge_y.append(None)

    edge_trace = go.Scatter(
        x=edge_x, y=edge_y,
        line=dict(width=0.5, color='#888'),
        hoverinfo='none',
        mode='lines'
    )

    node_x = []
    node_y = []
    for node in G.nodes():
        x, y = pos[node]
        node_x.append(x)
        node_y.append(y)

    node_trace = go.Scatter(
        x=node_x, y=node_y,
        mode='markers',
        hoverinfo='text',
        line_width=2
    )

    fig = go.Figure(data=[edge_trace, node_trace], layout=go.Layout())

    return fig


wandb.init(project=visualize_graph)
wandb.log({graph: wandb.Plotly(create_vis(graph))})
wandb.finish()
この視覚化結果は、例の関数を使用して作成され、W&B テーブル内に記録されました。

メトリクスのログ化

損失関数、精度などのメトリクスを含む実験を追跡するためにW&Bを使用することができます。トレーニングループに次の行を追加してください:

wandb.log({
	train/loss: training_loss,
	train/acc: training_acc,
	val/loss: validation_loss,
	val/acc: validation_acc
})
W&Bからのプロットが、異なるK値に対するエポックごとのhits@Kメトリクスの変化を示しています。

その他のリソース