Ainsteinx Logo
Ainsteinx
👤
ยินดีต้อนรับสู่ Ainsteinx
เข้าสู่ระบบ

เปลี่ยนภาษา

สกุลเงิน

หน้าแรก
บล็อก
บริการ
บทที่ 02 · บทนำ

พื้นฐาน Deep Learning

Neural network, loss และ optimizer ใน 20 บรรทัด

Neural network คือชั้นของการคูณเมทริกซ์สลับกับ activation (ReLU) การฝึกคือการปรับ weight ให้ loss ลดลงด้วย gradient descent และ optimizer เช่น Adam

โค้ดตัวอย่างฝึก MLP จำแนกตัวเลขลายมือขนาด 8×8 (มากับ scikit-learn ไม่ต้องดาวน์โหลด) ได้ความแม่นยำราว 90%

y = softmax( W₂ · ReLU( W₁·x + b₁ ) + b₂ ) loss = −Σ y_true · log y w ← w − lr · ∂loss/∂w
ส่วนหน้าที่
Dense / Linearคูณเมทริกซ์ + bias
Conv2dหาลวดลายในภาพด้วย filter เล็กๆ
BatchNorm · Dropoutช่วยให้ฝึกเสถียรและไม่ overfit
Adamoptimizer ที่ปรับ learning rate ให้แต่ละ weight

สิ่งที่ควรจำ

  • ทุก generative model ในซีรีส์นี้สร้างจากชิ้นส่วนเหล่านี้
  • สิ่งที่เปลี่ยนไปในแต่ละบทคือ loss function
generative-ai-ep02-deep-learning.py
import torch, torch.nn as nn
from sklearn.datasets import load_digits

torch.manual_seed(0)
X, y = load_digits(return_X_y=True)                      # 1,797 images of 8x8 digits
X = torch.tensor(X / 16.0, dtype=torch.float32)
y = torch.tensor(y)
train, test = slice(0, 1400), slice(1400, None)

model = nn.Sequential(nn.Linear(64, 128), nn.ReLU(),
                      nn.Linear(128, 10))                  # 10 classes
opt = torch.optim.Adam(model.parameters(), lr=1e-2)
for epoch in range(60):
    loss = nn.functional.cross_entropy(model(X[train]), y[train])
    opt.zero_grad(); loss.backward(); opt.step()
    if epoch % 20 == 19:
        acc = (model(X[test]).argmax(1) == y[test]).float().mean()
        print(f"epoch {epoch + 1:2d}  loss {loss.item():.3f}  test acc {acc:.2%}")

ผลลัพธ์

epoch 20  loss 0.158  test acc 87.66%
epoch 40  loss 0.042  test acc 89.67%
epoch 60  loss 0.020  test acc 90.93%
  • #GenerativeAI
  • #DeepLearning
  • #PythonສຳລັບຄົນLaos
  • #AI
  • #ບອກຕໍ່ຄວາມຮູ້