メインコンテンツへスキップ
PyTorch Geometric、または PyG は、幾何学的深層学習のための最も人気のあるライブラリの 1 つであり、グラフの可視化や Experiments の追跡において W&B と非常に相性よく機能します。 PyTorch Geometric をインストールしたら、次の手順に従って作業を開始してください。

サインアップしてAPIキーを作成する

APIキーは、マシンをW&Bに対して認証するためのものです。APIキーはユーザープロファイルから発行できます。
よりシンプルに行うには、User Settings に直接アクセスしてAPIキーを作成してください。作成したばかりのAPIキーをすぐにコピーし、パスワードマネージャーなどの安全な場所に保管してください。
  1. 右上隅のユーザープロファイルアイコンをクリックします。
  2. User Settings を選択し、API Keys セクションまでスクロールします。

wandb ライブラリをインストールしてログインする

ローカル環境で wandb ライブラリをインストールし、ログインするには次の手順を実行します。
  1. WANDB_API_KEY environment variable を自分の APIキー に設定します。
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb ライブラリをインストールしてログインします。
    pip install wandb
    
    wandb login
    

グラフを可視化する

入力グラフに関するエッジ数やノード数などの詳細を記録できます。W&B は Plotly チャートと HTML パネルのロギングをサポートしているため、グラフ向けに作成したあらゆる可視化を W&B にログとして記録できます。

PyVis を使う

次のスニペットは、PyVis と HTML を使って同じことを行う方法を示しています。
from pyvis.network import Network
import wandb

with wandb.init(project=’graph_vis’) as run:
    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")
    run.log({"eda/graph": wandb.Html("graph.html")})
インタラクティブなグラフの可視化

Plotly を使用する

Plotly を使用してグラフを可視化するには、まず PyG のグラフを networkx オブジェクトに変換する必要があります。その後、ノードとエッジそれぞれに対して Plotly の散布図(scatter プロット)を作成します。以下のコードスニペットをこの作業に使用できます。
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


with wandb.init(project=’visualize_graph’) as run:
    run.log({‘graph’: wandb.Plotly(create_vis(graph))})
例示用関数で作成し、W&B Table にログした可視化画像

メトリクスをログする

W&B を使用して、Experiments とそれに関連する損失関数や精度などのメトリクスを追跡できます。学習ループに次の行を追加します。
with wandb.init(project="my_project", entity="my_entity") as run:
    run.log({
        'train/loss': training_loss,
        'train/acc': training_acc,
        'val/loss': validation_loss,
        'val/acc': validation_acc
        })
エポックにわたる hits@K メトリクスの推移

その他の参考資料