0Pricing
Learn AI with Python · Lekcja

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_mask

Obiekt 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

  1. Teoria grafów na potrzeby uczenia maszynowego
  2. Grafowe sieci konwolucyjne (GCN)
  3. Klasyfikacja węzłów za pomocą GNN
  4. Predykcja krawędzi i klasyfikacja grafów
← Powrót do Learn AI with Python