본문으로 건너뛰기

PyTorch Geometric

PyTorch Geometric 또는 PyG는 기하학적 딥러닝을 위한 가장 인기 있는 라이브러리 중 하나이며, W&B는 그래프 시각화 및 실험 추적에 매우 잘 작동합니다.

시작하기

pytorch geometric을 설치한 후에, wandb 라이브러리를 설치하고 로그인하세요.

pip install 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 시각화로 입력 그래프를 보여줍니다.
이 이미지는 인터랙티브한 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 테이블 내부에 로깅되었습니다.

메트릭 로깅하기

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 메트릭이 어떻게 변하는지를 보여줍니다.
W&B에서 보여지는 플롯으로, 다양한 K 값에 대해 에포크별로 hits@K 메트릭이 어떻게 변하는지를 보여줍니다.

추가 자료

Was this page helpful?👍👎