การสร้างและฝึก CNN ด้วย PyTorch
nn.Conv2d, nn.MaxPool2d, nn.Linear, วงรอบการฝึก ตัวเพิ่มประสิทธิภาพ ฟังก์ชันสูญเสีย และการติดตามความแม่นยำ
การสร้างและฝึก CNN ด้วย PyTorch เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ CNN กับรูปภาพ
โครงข่ายประสาทเทียมแบบคอนโวลูชันเรียนรู้รูปแบบเชิงพื้นที่ ตั้งแต่ขอบ พื้นผิว ไปจนถึงรูปร่างและวัตถุ การคอนโวลูชันใช้ค่าน้ำหนักร่วมกันทั่วทั้งรูปภาพ ทำให้ CNN มีประสิทธิภาพและรับรู้การเลื่อนตำแหน่ง จึงเป็นแกนหลักของการมองเห็นด้วยคอมพิวเตอร์
import torch
import torch.nn as nnคลาสพื้นฐาน nn.Module
โมเดลจะสืบทอดจาก nn.Module คุณกำหนดชั้นต่าง ๆ ใน __init__ และกำหนดการไหลของข้อมูลใน forward PyTorch จะติดตามพารามิเตอร์และเกรเดียนต์ให้อัตโนมัติ
class CNN(nn.Module):
def __init__(self):
super().__init__()ชั้นคอนโวลูชัน
nn.Conv2d(in_channels, out_channels, kernel_size) จะเลื่อนฟิลเตอร์ที่เรียนรู้ได้ไปบนรูปภาพเพื่อสร้างแผนผังคุณลักษณะ ชั้นคอนโวลูชันแรกจะรับข้อมูล 3 ช่อง (RGB) และส่งออกหลายช่องมากขึ้นเพื่อจับคุณลักษณะที่แตกต่างกัน
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)ชั้นการรวมกลุ่ม
nn.MaxPool2d จะลดขนาดแผนผังคุณลักษณะโดยเก็บค่าสูงสุดในแต่ละหน้าต่าง วิธีนี้ช่วยลดขนาดเชิงพื้นที่ ลดการคำนวณ และเพิ่มความไม่แปรผันต่อการเลื่อนตำแหน่งเล็กน้อย
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)ชั้นเชื่อมต่อเต็มรูปแบบ
หลังจากการคอนโวลูชัน ให้คลี่คุณลักษณะออกแล้วส่งผ่านชั้น nn.Linear เพื่อสร้างคะแนนของคลาส Linear ชั้นสุดท้ายจะส่งออกค่าหนึ่งค่าต่อหนึ่งคลาส
self.fc1 = nn.Linear(32 * 8 * 8, 128)
self.fc2 = nn.Linear(128, 10) # 10 classesเมธอด forward
เมธอด forward กำหนดการไหลของข้อมูล ได้แก่ จากชั้นคอนโวลูชันไปยัง ReLU แล้วไปยัง pool และทำซ้ำ จากนั้นคลี่ข้อมูลออกแล้วส่งให้ชั้นเชิงเส้น F.relu เพิ่มความไม่เชิงเส้นที่ทำให้โครงข่ายเรียนรู้รูปแบบซับซ้อนได้
import torch.nn.functional as F
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(x.size(0), -1) # flatten
x = F.relu(self.fc1(x))
return self.fc2(x)ฟังก์ชันสูญเสียและตัวปรับค่า
สำหรับการจำแนกประเภท ให้ใช้ CrossEntropyLoss ตัวปรับค่าอย่าง Adam จะปรับน้ำหนักโดยใช้เกรเดียนต์ ให้ส่งพารามิเตอร์ของโมเดลและอัตราการเรียนรู้เข้าไป
model = CNN()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)วงจรการฝึก: ล้างเกรเดียนต์
แต่ละขั้นจะเริ่มด้วยการล้างเกรเดียนต์เก่าด้วย optimizer.zero_grad() หากข้ามขั้นตอนนี้ เกรเดียนต์จะสะสมข้ามชุดข้อมูลย่อยและทำให้การปรับค่าน้ำหนักผิดพลาด
for images, labels in loader:
optimizer.zero_grad()การส่งข้อมูลไปข้างหน้าและค่าความสูญเสีย
ส่งชุดข้อมูลย่อยผ่านโมเดลเพื่อรับผลการทำนาย จากนั้นคำนวณค่าความสูญเสียโดยเปรียบเทียบผลการทำนายกับป้ายกำกับจริง ค่าความสูญเสียเป็นตัวเลขเดียวที่วัดว่าโมเดลทำนายผิดมากน้อยเพียงใด
outputs = model(images)
loss = criterion(outputs, labels)การแพร่ย้อนกลับและการปรับค่า
loss.backward() คำนวณเกรเดียนต์ผ่านออโตเกรด ส่วน optimizer.step() จะปรับน้ำหนักเล็กน้อยเพื่อลดค่าความสูญเสีย ทั้งสองอย่างรวมกันเป็นหนึ่งขั้นของการเรียนรู้
loss.backward()
optimizer.step()การติดตามความแม่นยำ
ติดตามความคืบหน้าด้วยการนับผลการทำนายที่ถูกต้อง ใช้ argmax กับผลลัพธ์เพื่อรับคลาสที่ทำนาย เปรียบเทียบกับป้ายกำกับ แล้วหารจำนวนที่ทายถูกด้วยจำนวนทั้งหมด
preds = outputs.argmax(dim=1)
correct = (preds == labels).sum().item()
acc = correct / labels.size(0)
print("batch acc:", acc)ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับวงจรการฝึกของคุณ
สรุป: การสร้างและการฝึก CNN
คุณสร้าง CNN ด้วยการสืบทอดจาก nn.Module โดยใช้ชั้น nn.Conv2d, nn.MaxPool2d และ nn.Linear พร้อมเมธอด forward จากนั้นฝึกโมเดลด้วยวงจรที่ประกอบด้วย zero_grad, การส่งข้อมูลไปข้างหน้า, loss.backward() และ optimizer.step() พร้อมติดตามความแม่นยำด้วย argmax
คำถามที่พบบ่อย
บทเรียน “การสร้างและฝึก CNN ด้วย PyTorch” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างและฝึก CNN ด้วย PyTorch” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างและฝึก CNN ด้วย PyTorch”
nn.Conv2d, nn.MaxPool2d, nn.Linear, วงรอบการฝึก ตัวเพิ่มประสิทธิภาพ ฟังก์ชันสูญเสีย และการติดตามความแม่นยำ คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างและฝึก CNN ด้วย PyTorch” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เทนเซอร์ PyTorch และ Autograd
- ชุดข้อมูลและ DataLoaders แบบกำหนดเอง
- การสร้างและฝึก CNN ด้วย PyTorch
- การตรวจจับวัตถุด้วย YOLOv8