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

การสร้างและฝึก 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. เทนเซอร์ PyTorch และ Autograd
  2. ชุดข้อมูลและ DataLoaders แบบกำหนดเอง
  3. การสร้างและฝึก CNN ด้วย PyTorch
  4. การตรวจจับวัตถุด้วย YOLOv8
← กลับไปที่ Learn AI with Python