พื้นฐาน 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 |
| Adam | optimizer ที่ปรับ learning rate ให้แต่ละ weight |
สิ่งที่ควรจำ
- ทุก generative model ในซีรีส์นี้สร้างจากชิ้นส่วนเหล่านี้
- สิ่งที่เปลี่ยนไปในแต่ละบทคือ loss function
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
- #ບອກຕໍ່ຄວາມຮູ້