การจำแนกโหนดด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทฤษฎีกราฟสำหรับการเรียนรู้ของเครื่อง
- โครงข่ายกราฟคอนโวลูชัน (GCN)
- การจำแนกโหนดด้วย GNN
- การพยากรณ์เส้นเชื่อมและการจำแนกกราฟ