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

การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน

keras.applications.VGG16(weights='imagenet', include_top=False) และการเพิ่มส่วนหัวแบบกำหนดเอง

การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

โมดูลแอปพลิเคชันของ Keras

tf.keras.applications มีสถาปัตยกรรมที่ฝึกไว้ล่วงหน้าหลายสิบแบบซึ่งดาวน์โหลดได้ด้วยโค้ดเพียงหนึ่งบรรทัด สองสถาปัตยกรรมคลาสสิกคือ VGG16 (กลุ่มคอนโวลูชัน 3x3 ที่เรียบง่ายและมีหลายชั้น) และ ResNet50 (การเชื่อมต่อแบบตกค้าง ทำให้ลึกกว่าและแม่นยำกว่า)

การโหลด VGG16 เป็นฐาน

โหลด VGG16 ด้วยน้ำหนัก ImageNet แต่ไม่รวมส่วนหัวตัวจำแนก เพื่อให้คุณติดตั้งส่วนหัวของตัวเองได้

from tensorflow.keras.applications import VGG16

base = VGG16(
    weights="imagenet",        # download pretrained weights
    include_top=False,         # drop the 1000-class classifier
    input_shape=(224, 224, 3)  # standard ImageNet input size
)

ทำความเข้าใจอาร์กิวเมนต์

  • weights="imagenet": โหลดน้ำหนักที่ฝึกไว้ล่วงหน้าแทนการสุ่มน้ำหนัก
  • include_top=False: ลบตัวจำแนก Dense เดิมออก เพื่อให้คุณเพิ่มตัวจำแนกของตัวเองได้
  • input_shape=(224,224,3): ความสูง ความกว้าง และช่อง RGB 3 ช่อง

การกำหนด include_top=False คือสิ่งที่ทำให้สามารถนำโมเดลกลับมาใช้กับงานใหม่ได้

การตรึงฐาน

กำหนด base.trainable = False เพื่อให้น้ำหนักคอนโวลูชันที่ฝึกไว้ล่วงหน้าคงที่ระหว่างการฝึกระยะแรก โดยจะมีเพียงส่วนหัวใหม่ของคุณที่เรียนรู้

base.trainable = False
print(len(base.trainable_weights))  # -> 0 when frozen

GlobalAveragePooling2D

ฐานจะให้แผนที่คุณลักษณะ 3 มิติ เช่น (7, 7, 512) GlobalAveragePooling2D จะหาค่าเฉลี่ยของแต่ละช่องตลอดตารางเชิงพื้นที่ แล้วลดรูปให้เป็นเวกเตอร์เดียวต่อหนึ่งช่อง ซึ่งในที่นี้มีความยาว 512

วิธีนี้ใช้แทน Flatten + Dense ขนาดใหญ่ ช่วยลดจำนวนพารามิเตอร์และลดการเรียนรู้เกินพอดีได้อย่างมาก

from tensorflow.keras.layers import GlobalAveragePooling2D

# (batch, 7, 7, 512) -> (batch, 512)
pooled = GlobalAveragePooling2D()(base.output)

การเพิ่มส่วนหัวเอาต์พุต Dense

ติดตั้งชั้น Dense ที่มีขนาดเท่ากับจำนวนคลาสของคุณ ใช้ softmax สำหรับหลายคลาส หรือ sigmoid สำหรับการจำแนกแบบสองคลาส

from tensorflow.keras import layers, Model

x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = Model(inputs=base.input, outputs=outputs)

การเปลี่ยนไปใช้ ResNet50

ResNet50 ใช้วิธีเรียกใช้งานแบบเดียวกัน การเชื่อมต่อแบบตกค้าง (การข้ามชั้น) ช่วยให้ฝึกโครงข่ายที่ลึกกว่ามากได้โดยไม่เกิดปัญหาการไล่ระดับสีหายไป และโดยทั่วไปให้ความแม่นยำบน ImageNet สูงกว่า VGG16 ด้วยความเร็วใกล้เคียงกัน

from tensorflow.keras.applications import ResNet50

base = ResNet50(
    weights="imagenet",
    include_top=False,
    input_shape=(224, 224, 3)
)
base.trainable = False

VGG16 เทียบกับ ResNet50

  • VGG16: พารามิเตอร์ประมาณ 138M กลุ่มชั้น 3x3 ที่เรียบง่ายและเป็นรูปแบบเดียวกัน ใช้หน่วยความจำมาก และทำความเข้าใจได้ง่าย
  • ResNet50: พารามิเตอร์ประมาณ 25M มีกลุ่มชั้นแบบตกค้าง ลึกกว่า โดยทั่วไปแม่นยำกว่าและใช้ทรัพยากรน้อยกว่า

สำหรับงานการเรียนรู้แบบถ่ายโอนสมัยใหม่ส่วนใหญ่ ResNet50 เป็นค่าเริ่มต้นที่มีประสิทธิภาพกว่า

การประมวลผลล่วงหน้าให้ตรงกัน

แต่ละตระกูลมี preprocess_input ของตัวเอง VGG16 ลบค่าค่าเฉลี่ยของ RGB ขณะที่ ResNet50 ใช้การปรับขนาดในรูปแบบคล้าย Caffe ให้ import ตัวที่ตรงกับฐานของคุณเสมอ

from tensorflow.keras.applications.resnet50 import preprocess_input

x = preprocess_input(image_batch)  # required for correct results

การ compile โมเดล

เมื่อตรึงฐานแล้ว ให้ compile และฝึกส่วนหัวด้วยตัวปรับค่าแบบปกติ

model.compile(
    optimizer="adam",
    loss="categorical_crossentropy",
    metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=10)

การตรวจสอบสถาปัตยกรรม

เรียกใช้ model.summary() เพื่อยืนยันว่าฐานถูกตรึงแล้ว (พารามิเตอร์ที่ไม่สามารถฝึกได้มีจำนวนมาก) และมีเพียงส่วนหัวที่สามารถฝึกได้ การตรวจสอบความถูกต้องเบื้องต้นนี้ช่วยตรวจพบข้อผิดพลาดในการตั้งค่าได้ตั้งแต่เนิ่น ๆ

model.summary()
# Look at "Trainable params" vs "Non-trainable params"

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ตรวจสอบความเข้าใจเกี่ยวกับการสร้างโมเดลการเรียนรู้แบบถ่ายโอนใน Keras

สรุป

คุณโหลด VGG16 และ ResNet50 ด้วย weights="imagenet", include_top=False และ input_shape=(224,224,3) ตรึงฐานด้วย base.trainable=False รวมคุณลักษณะด้วย GlobalAveragePooling2D และเพิ่มส่วนหัวเอาต์พุต Dense

ResNet50 เป็นค่าเริ่มต้นที่มีประสิทธิภาพกว่า ต่อไป: การปลดการตรึงชั้นเพื่อปรับจูนละเอียด

คำถามที่พบบ่อย

บทเรียน “การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน”

keras.applications.VGG16(weights='imagenet', include_top=False) และการเพิ่มส่วนหัวแบบกำหนดเอง คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน
  2. การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน
  3. การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่
  4. MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย
← กลับไปที่ Learn AI with Python