PyTorch Geometric
PyTorch Geometric 또는 PyG는 기하학적 딥러닝을 위한 가장 인기 있는 라이브러리 중 하나이며, W&B는 그래프 시각화 및 실험 추적에 매우 잘 작동합니다.
시작하기
pytorch geometric을 설치한 후에, wandb 라이브러리를 설치하고 로그인하세요.
- 커맨드라인
- 노트북
pip install 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 메트릭이 어떻게 변하는지를 보여줍니다. |