Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีใช้ Data Augmentation เพื่อลด Overfitting ด้วย TensorFlow และ Python


Data Augmentation สามารถใช้ลด overfitting ได้โดยการเพิ่มข้อมูลฝึกอบรมเพิ่มเติม ซึ่งทำได้โดยการสร้างโมเดล sequential ที่ใช้เลเยอร์ 'RandomFlip'

อ่านเพิ่มเติม: TensorFlow คืออะไร และ Keras ทำงานกับ TensorFlow เพื่อสร้าง Neural Networks อย่างไร?

เราจะใช้ Keras Sequential API ซึ่งช่วยในการสร้างโมเดล sequential ที่ใช้ทำงานกับชั้นเลเยอร์แบบเรียงลำดับ โดยแต่ละเลเยอร์มี input tensor และ output tensor เพียงหนึ่งเดียว

Neural network ที่มีอย่างน้อยหนึ่งเลเยอร์แบบ Convolutional เรียกว่า Convolutional Neural Network เราสามารถใช้ CNN เพื่อสร้างโมเดลการเรียนรู้

Image classifier ถูกสร้างโดยใช้ keras.Sequential model และโหลดข้อมูลด้วย preprocessing.image_dataset_from_directory ข้อมูลถูกโหลดจากดิสก์อย่างมีประสิทธิภาพ Overfitting ถูกตรวจจับและมีการใช้เทคนิคเพื่อลดทอน ได้แก่ data augmentation และ dropout มีรูปภาพดอกไม้ 3700 รูป ชุดข้อมูลนี้มี 5 โฟลเดอร์ย่อย โดยมีหนึ่งโฟลเดอร์ต่อคลาส ได้แก่:

daisy, dandelion, roses, sunflowers, และ tulips

เราใช้ Google Colaboratory เพื่อรันโค้ดด้านล่าง Google Colab ช่วยให้รันโค้ด Python ผ่านเบราว์เซอร์ ไม่ต้องตั้งค่า และเข้าถึง GPU ฟรี Colaboratory สร้างขึ้นบน Jupyter Notebook

เมื่อจำนวนตัวอย่างฝึกอบรมน้อย โมเดลจะเรียนรู้จาก noise หรือรายละเอียดที่ไม่ต้องการจากตัวอย่างฝึกอบรม ส่งผลให้ประสิทธิภาพของโมเดลกับตัวอย่างใหม่ลดลง

เนื่องจาก overfitting โมเดลจะไม่สามารถ generalize ได้ดีกับชุดข้อมูลใหม่ มีหลายวิธีป้องกัน overfitting เราจะใช้ data augmentation เพื่อแก้ปัญหา Data augmentation สร้างข้อมูลฝึกอบรมเพิ่มเติมจากตัวอย่างที่มีอยู่โดยเพิ่มการแปลงแบบสุ่มที่ให้ภาพดูน่าเชื่อถือ

สิ่งนี้ช่วยให้โมเดลได้สัมผัสกับมุมมองมากขึ้นของข้อมูล ช่วยให้โมเดล generalize ได้ดียิ่งขึ้น ตัวอย่างดังนี้:

ตัวอย่าง

print("Using data augmentation to eliminate overfitting")
data_augmentation = keras.Sequential(
    [
        layers.experimental.preprocessing.RandomFlip("horizontal", input_shape=(img_height, img_width, 3)),
        layers.experimental.preprocessing.RandomRotation(0.1),
        layers.experimental.preprocessing.RandomZoom(0.1),
    ]
)

Code credit - https://www.tensorflow.org/tutorials/images/classification

ผลลัพธ์

Using data augmentation to eliminate overfitting

คำอธิบาย

  • Data augmentation สามารถนำไปใช้ได้โดยใช้เลเยอร์จาก tf.keras.layers.experimental.preprocessing

  • เลเยอร์เหล่านี้ถูกรวมอยู่ในโมเดลเหมือนเลเยอร์อื่นๆ และรันบน GPU

  • ทำเพื่อกำจัดหรือลด overfitting