Klasyfikacja węzłów za pomocą GNN
Zbiór danych Cora, dwuwarstwowa GCN, pętla trenowania, maskowana funkcja straty, dokładność testowa, wizualizacja osadzeń.
Klasyfikacja węzłów za pomocą GNN to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Zadanie klasyfikacji węzłów
Klasyfikacja węzłów polega na przewidywaniu etykiety dla każdego węzła na podstawie jego cech i struktury grafu. Klasyczny przykład to przypisanie każdej publikacji w sieci cytowań tematu badawczego z wykorzystaniem zarówno słów z publikacji, jak i informacji o tym, które publikacje cytuje.
Zbiór danych Cora
Cora to MNIST uczenia na grafach. Jest to graf cytowań obejmujący 2708 publikacji z dziedziny uczenia maszynowego. Krawędzie oznaczają cytowania, każda publikacja ma wektor cech typu bag-of-words o długości 1433, a celem jest zaklasyfikowanie każdej publikacji do jednego z 7 tematów.
# Cora:
# nodes = 2708 papers
# edges = citations
# features per node = 1433
# classes = 7Ładowanie za pomocą Planetoid
PyTorch Geometric dostarcza zbiór Cora za pośrednictwem modułu ładującego Planetoid, który pobiera dane i formatuje je jako pojedynczy obiekt grafu.
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root="data/Cora", name="Cora")
data = dataset[0]
print(data) # x, edge_index, y, train_mask, test_maskObiekt danych
Obiekt grafu zawiera wszystko: data.x (cechy 2708 x 1433), data.edge_index (połączenia), data.y (rzeczywiste etykiety) oraz maski logiczne określające, które węzły służą do trenowania, walidacji i testowania.
GCN dla 7 klas
Budujemy dwuwarstwową sieć GCN, która przekształca 1433 cechy wejściowe przez ukrytą warstwę o wymiarze 64 do 7 logitów klas.
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
class GCN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(1433, 64)
self.conv2 = GCNConv(64, 7)
def forward(self, x, edge_index):
x = F.relu(self.conv1(x, edge_index))
x = F.dropout(x, training=self.training)
return self.conv2(x, edge_index)Uczenie transdukcyjne
Cora jest transdukcyjny: cały graf (w tym węzły testowe i ich cechy) jest widoczny podczas trenowania; ukrywamy tylko etykiety węzłów testowych. Model korzysta z połączeń wszystkich węzłów, ale uczy się wyłącznie na oznaczonych węzłach treningowych.
Maska train_mask
train_mask to wektor logiczny wybierający węzły, które wpływają na funkcję straty. Uruchamiamy model na całym grafie, ale entropię krzyżową obliczamy wyłącznie dla zamaskowanych węzłów treningowych.
model = GCN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
def train():
model.train()
optimizer.zero_grad()
out = model(data.x, data.edge_index)
loss = F.cross_entropy(out[data.train_mask], data.y[data.train_mask])
loss.backward()
optimizer.step()
return loss.item()Intuicja stojąca za stratą z maską
Mimo że przebieg w przód generuje logity dla wszystkich 2708 węzłów, indeksowanie za pomocą train_mask ogranicza funkcję straty do oznaczonych węzłów treningowych. Węzły bez etykiet nadal przekazują komunikaty, pomagając modelowi, ale nie wpływają bezpośrednio na gradient.
Ocena za pomocą test_mask
Po zakończeniu trenowania oceniamy dokładność na węzłach wskazanych przez test_mask, których funkcja straty nigdy nie uwzględniała. Mierzy to zdolność uogólniania na publikacje, których etykiet model nigdy nie widział.
@torch.no_grad()
def test():
model.eval()
pred = model(data.x, data.edge_index).argmax(dim=1)
correct = (pred[data.test_mask] == data.y[data.test_mask]).sum()
return int(correct) / int(data.test_mask.sum())Wizualizacja osadzeń za pomocą t-SNE
Aby zobaczyć, czego nauczyła się sieć GCN, pobieramy osadzenia węzłów z warstwy ukrytej i rzutujemy je na płaszczyznę 2D za pomocą t-SNE. Dobrze wytrenowana sieć GCN tworzy klastry, w których węzły tej samej klasy grupują się razem.
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
emb = model.conv1(data.x, data.edge_index).detach().numpy()
z = TSNE(n_components=2).fit_transform(emb)
plt.scatter(z[:, 0], z[:, 1], c=data.y, cmap="tab10", s=8)Interpretacja wykresu t-SNE
Dobrze odseparowane kolorowe klastry oznaczają, że osadzenia pozwalają rozróżniać klasy, co wskazuje, że sieć GCN nauczyła się użytecznej struktury. Nakładające się skupiska mogą sugerować niedostateczne trenowanie lub nadmierne wygładzanie. t-SNE służy do oceny jakościowej, a nie jest metryką.
Szybki sprawdzian
Proszę sprawdzić swoją wiedzę o klasyfikacji węzłów.
Podsumowanie
Poznali Państwo klasyfikację węzłów za pomocą GNN:
- Planetoid ładuje graf cytowań Cora
- Dwuwarstwowa sieć GCN odwzorowuje 1433 na 64, a następnie na 7 klas
- train_mask ogranicza funkcję straty, a test_mask mierzy zdolność uogólniania
- t-SNE wizualizuje osadzenia węzłów, umożliwiając ocenę separacji klas
Często zadawane pytania
Czy lekcja „Klasyfikacja węzłów za pomocą GNN” jest bezpłatna?
Tak — pełny tekst „Klasyfikacja węzłów za pomocą GNN” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Klasyfikacja węzłów za pomocą GNN”?
Zbiór danych Cora, dwuwarstwowa GCN, pętla trenowania, maskowana funkcja straty, dokładność testowa, wizualizacja osadzeń. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Klasyfikacja węzłów za pomocą GNN”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Teoria grafów na potrzeby uczenia maszynowego
- Grafowe sieci konwolucyjne (GCN)
- Klasyfikacja węzłów za pomocą GNN
- Predykcja krawędzi i klasyfikacja grafów