0Pricing
Learn AI with Python · บทเรียน

การจำแนกโหนดด้วย GNN

ชุดข้อมูล Cora, GCN 2 เลเยอร์ วงรอบการฝึก ฟังก์ชันสูญเสียแบบมีมาสก์ ความแม่นยำจากการทดสอบ และการแสดงภาพเวกเตอร์ฝัง

การจำแนกโหนดด้วย GNN เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

งานการจำแนกโหนด

การจำแนกโหนดคือการทำนายป้ายกำกับของแต่ละโหนดโดยใช้คุณลักษณะของโหนดและโครงสร้างกราฟ ตัวอย่างคลาสสิกคือการกำหนดป้ายกำกับให้บทความแต่ละฉบับในเครือข่ายการอ้างอิงตามหัวข้องานวิจัย โดยใช้ทั้งคำในบทความและบทความที่บทความนั้นอ้างอิง

ชุดข้อมูล Cora

Cora คือ MNIST ของการเรียนรู้บนกราฟ เป็นกราฟการอ้างอิงที่ประกอบด้วยบทความด้านการเรียนรู้ของเครื่อง 2,708 ฉบับ เส้นเชื่อมคือการอ้างอิง แต่ละบทความมีเวกเตอร์คุณลักษณะแบบถุงคำยาว 1433 และเป้าหมายคือการจำแนกบทความแต่ละฉบับออกเป็น 7 หัวข้อ

# Cora:
#   nodes  = 2708 papers
#   edges  = citations
#   features per node = 1433
#   classes = 7

การโหลดผ่าน Planetoid

PyTorch Geometric มาพร้อมตัวโหลด Planetoid สำหรับ Cora ซึ่งจะดาวน์โหลดและจัดรูปแบบข้อมูลเป็นออบเจ็กต์กราฟเดียว

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

ออบเจ็กต์ข้อมูล

ออบเจ็กต์กราฟเก็บทุกอย่างไว้ ได้แก่ data.x (คุณลักษณะขนาด 2708 x 1433), data.edge_index (การเชื่อมต่อ), data.y (ป้ายกำกับจริง) และมาสก์บูลีนที่ระบุว่าโหนดใดใช้สำหรับการฝึก การตรวจสอบ และการทดสอบ

GCN สำหรับ 7 หมวดหมู่

เราจะสร้าง GCN แบบ 2 ชั้น ซึ่งแปลงคุณลักษณะขาเข้าจำนวน 1433 รายการผ่านชั้นซ่อนขนาด 64 มิติ แล้วลดลงเป็นค่าลอจิตของ 7 หมวดหมู่

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)

การเรียนรู้แบบทรานส์ดักทีฟ

Cora เป็นข้อมูลแบบทรานส์ดักทีฟ: กราฟทั้งหมด (รวมถึงโหนดทดสอบและคุณลักษณะของโหนดเหล่านั้น) จะมองเห็นได้ระหว่างการฝึก เราจะซ่อนเฉพาะป้ายกำกับของโหนดทดสอบเท่านั้น โมเดลใช้การเชื่อมต่อของโหนดทุกโหนด แต่เรียนรู้จากโหนดฝึกที่มีป้ายกำกับเท่านั้น

train_mask

train_maskคือเวกเตอร์บูลีนที่เลือกโหนดซึ่งมีส่วนต่อค่าความสูญเสีย เราเรียกใช้โมเดลกับกราฟทั้งหมด แต่คำนวณค่าความสูญเสียแบบ cross-entropy เฉพาะโหนดฝึกที่มาสก์ไว้

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()

สัญชาตญาณของค่าความสูญเสียแบบมีมาสก์

แม้การส่งต่อไปข้างหน้าจะสร้างค่าลอจิตสำหรับโหนดทั้ง 2708 โหนด แต่การใช้ดัชนีร่วมกับ train_mask จะจำกัดค่าความสูญเสียไว้เฉพาะโหนดฝึกที่มีป้ายกำกับ โหนดที่ไม่มีป้ายกำกับยังคงส่งต่อข้อความเพื่อช่วยโมเดล แต่ไม่ได้เป็นตัวขับเคลื่อนเกรเดียนต์โดยตรง

การประเมินด้วย test_mask

หลังการฝึก เราจะประเมินความแม่นยำบนโหนด test_mask ที่กันไว้สำหรับการทดสอบ ซึ่งค่าความสูญเสียไม่เคยนำไปใช้ โหนดเหล่านี้ใช้วัดความสามารถในการสรุปไปยังบทความที่โมเดลไม่เคยเห็นป้ายกำกับ

@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())

การแสดงเวกเตอร์ตัวแทนด้วย t-SNE

หากต้องการดูว่า GCN เรียนรู้อะไร ให้ใช้เวกเตอร์ตัวแทนของโหนดจากชั้นซ่อน แล้วฉายลงเป็น 2 มิติด้วย t-SNE GCN ที่ฝึกได้ดีจะสร้างกลุ่มที่โหนดในหมวดหมู่เดียวกันอยู่รวมกัน

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)

การตีความกราฟ t-SNE

กลุ่มสีที่แยกจากกันชัดเจนหมายความว่าเวกเตอร์ตัวแทนสามารถแยกหมวดหมู่ได้ดี ซึ่งเป็นสัญญาณว่า GCN เรียนรู้โครงสร้างที่มีประโยชน์ กลุ่มก้อนที่ทับซ้อนกันอาจบ่งชี้ว่าฝึกไม่มากพอหรือเกิดการทำให้เรียบมากเกินไป t-SNE เป็นการตรวจสอบเชิงคุณภาพ ไม่ใช่ตัวชี้วัด

ตรวจสอบความเข้าใจอย่างรวดเร็ว

โปรดทดสอบความรู้ด้านการจำแนกโหนดของคุณ

สรุปทบทวน

คุณได้เรียนรู้การจำแนกโหนดด้วย GNN ดังนี้

  • Planetoid โหลดกราฟการอ้างอิง Cora
  • GCN แบบ 2 ชั้นแปลงคุณลักษณะจาก 1433 เป็น 64 แล้วเป็น 7 หมวดหมู่
  • train_mask จำกัดค่าความสูญเสีย ส่วน test_mask ใช้วัดความสามารถในการสรุปไปยังข้อมูลใหม่
  • t-SNE แสดงเวกเตอร์ตัวแทนของโหนดเพื่อดูการแยกหมวดหมู่

คำถามที่พบบ่อย

บทเรียน “การจำแนกโหนดด้วย GNN” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจำแนกโหนดด้วย GNN” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจำแนกโหนดด้วย GNN”

ชุดข้อมูล Cora, GCN 2 เลเยอร์ วงรอบการฝึก ฟังก์ชันสูญเสียแบบมีมาสก์ ความแม่นยำจากการทดสอบ และการแสดงภาพเวกเตอร์ฝัง คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การจำแนกโหนดด้วย GNN” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทฤษฎีกราฟสำหรับการเรียนรู้ของเครื่อง
  2. โครงข่ายกราฟคอนโวลูชัน (GCN)
  3. การจำแนกโหนดด้วย GNN
  4. การพยากรณ์เส้นเชื่อมและการจำแนกกราฟ
← กลับไปที่ Learn AI with Python