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

การเสริมสามารถใช้เพื่อลดการ overfitting โดยใช้ Tensorflow และ Python ได้อย่างไร


สามารถใช้การเสริมเพื่อลดการฟิตเกินไปโดยการเพิ่มข้อมูลการฝึกอบรมเพิ่มเติม ทำได้โดยการสร้างโมเดลตามลำดับที่ใช้เลเยอร์ "RandomFlip"

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

เราจะใช้ Keras Sequential API ซึ่งมีประโยชน์ในการสร้างแบบจำลองตามลำดับที่ใช้ในการทำงานกับสแต็กเลเยอร์ธรรมดา โดยที่ทุกเลเยอร์มีอินพุตเทนเซอร์หนึ่งตัวและเอาต์พุตเทนเซอร์หนึ่งรายการ

โครงข่ายประสาทเทียมที่มีอย่างน้อยหนึ่งชั้นเรียกว่าชั้น Convolutional เราสามารถใช้ Convolutional Neural Network เพื่อสร้างแบบจำลองการเรียนรู้

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

เดซี่ ดอกแดนดิไลออน ดอกกุหลาบ ทานตะวัน และทิวลิป

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

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

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

ซึ่งช่วยให้โมเดลเปิดเผยข้อมูลในแง่มุมต่างๆ มากขึ้น ซึ่งช่วยให้โมเดลมีภาพรวมที่ดีขึ้น ต่อไปนี้เป็นตัวอย่าง:

ตัวอย่าง

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),
   ]
)

เครดิตโค้ด −https://www.tensorflow.org/tutorials/images/classification

ผลลัพธ์

Using data augmentation to eliminate overfitting

คำอธิบาย

  • การเพิ่มข้อมูลสามารถทำได้โดยใช้เลเยอร์จาก tf.keras.layers.experimental.preprocessing

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

  • สิ่งนี้ทำเพื่อขจัดหรือลดการสวมใส่มากเกินไป