ซ่อมซีเอ็นเอ็นเลย overfitting

0

คำถาม

ฉันใช้ซีเอ็นเอ็นและ MobileNet นางแบบเพื่อสร้างเป็นนางแบบเพื่อจำแนกเซ็นภาษาที่ต้องตัวอักษรจดหมายจากพื้นฐานเป็นรูปภาพข้อมูลเรียบร้อย ดังนั้นมันเป็นหลายชั้นเรียนการแบ่งประเภทคุณครูแต่พอกลับมา อย่างไรก็ตามหลังรวบรวมและเหมาะที่คุณครูแต่พอกลับมา ฉันได้สูงความถูกต้อ(98%). แต่ตอนที่ฉันอยากจะกภาพในความสับสเมตริกซ์ฉันคิดถึงย่าให้เขาไปถึงตัวออฟติมัส มันหมายถึงรุ่นคือ overfitting? แล้วฉันต้องซ่อมมันให้ได้ดีกว่าแมททริกซ์?


train_path = 'train'
test_path = 'test'

train_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.mobilenet.preprocess_input).flow_from_directory(
    directory=train_path, target_size=(64,64), batch_size=10)


test_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.mobilenet.preprocess_input).flow_from_directory(
    directory=test_path, target_size=(64,64), batch_size=10)


mobile = tf.keras.applications.mobilenet.MobileNet()

x = mobile.layers[-6].output
output = Dense(units=32, activation='softmax')(x)
model = Model(inputs=mobile.input, outputs=output)
for layer in model.layers[:-23]:
    layer.trainable = False
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

class myCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs={}):
        if(logs.get('val_accuracy')>=0.98):
            print('\n Reached to good accuracy')
            self.model.stop_training=True
callbacks=myCallback()


model.fit(train_batches,
            steps_per_epoch=len(train_batches), 
            validation_data=test_batches,
            validation_steps=len(test_batches),
            epochs=10,callbacks=[callbacks])




Epoch 1/10
4498/4498 [==============================] - 979s 217ms/step - loss: 1.3062 - accuracy: 0.6530 - val_loss: 0.1528 - val_accuracy: 0.9594
Epoch 2/10
4498/4498 [==============================] - 992s 221ms/step - loss: 0.1777 - accuracy: 0.9491 - val_loss: 0.1164 - val_accuracy: 0.9691
Epoch 3/10
4498/4498 [==============================] - 998s 222ms/step - loss: 0.1117 - accuracy: 0.9654 - val_loss: 0.0925 - val_accuracy: 0.9734
Epoch 4/10
4498/4498 [==============================] - 1000s 222ms/step - loss: 0.0789 - accuracy: 0.9758 - val_loss: 0.0992 - val_accuracy: 0.9750
Epoch 5/10
4498/4498 [==============================] - 1001s 223ms/step - loss: 0.0626 - accuracy: 0.9805 - val_loss: 0.0818 - val_accuracy: 0.9783
Epoch 6/10
4498/4498 [==============================] - 1007s 224ms/step - loss: 0.0521 - accuracy: 0.9834 - val_loss: 0.0944 - val_accuracy: 0.9789
Epoch 7/10
4498/4498 [==============================] - 1004s 223ms/step - loss: 0.0475 - accuracy: 0.9863 - val_loss: 0.0935 - val_accuracy: 0.9795
Epoch 8/10
4498/4498 [==============================] - 1013s 225ms/step - loss: 0.0371 - accuracy: 0.9880 - val_loss: 0.0854 - val_accuracy: 0.9781
Epoch 9/10
4498/4498 [==============================] - 896s 199ms/step - loss: 0.0365 - accuracy: 0.9879 - val_loss: 0.0766 - val_accuracy: 0.9806

 Reached to good accuracy


test_labels = test_batches.classes

predictions = model.predict(x=test_batches, steps=len(test_batches),verbose=0)

cm = confusion_matrix(y_true=test_labels, y_pred=predictions.argmax(axis=1))


cm_plot_labels = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16',
                  '17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'
                 ]
plot_confusion_matrix(cm=cm, classes=cm_plot_labels, title='Confusion Matrix')

ที่ส่งผลให้ความสับสเมตริกซ์

1

คำตอบที่ดีที่สุด

0

นั่นคือเทคนิคบางอย่างเพื่อช่วยเกี่ยวกับ orver ลองชุดปัญหา:

  1. การเพิ่ม ข้อมูล augmentationนนี้วิธีการจะไปหน่อยเปลี่ยนทุกครั้งที่นำเข้าข้อมูลกับการหมุนแบบสุ่ม croping เป็นต้น และรุ่นจะเห็นมากกว่าตัวอย่างของภาพเดียวกันมันจะช่วยนางแบบให้ดีขึ้น generalize.
  2. เพิ่ม dropout เลเยอร์นี่เลเยอร์จะตั้งค่าแบบสุ่มข้อมูลหน่วย 0 ด้วในการฝึกระบวนการดังนั้นอยู่ในนั้นรุ่นจะทำให้มากก epoch ก่อนจบที่เหมาะสม
  3. L1 และ L2 regularization นนี้วิธีการจะ penalize การความปลอดภัยค่ายบน้ำหนักโดยการเพิ่มพวกเขาไปกับเสียเวลาอะไรขนาดนั้น(ป้อยู่เชื่อมโยงรายละเอียดที่นี่
  4. และมันคงจะดีถ้ามีเพื่อนเปลี่ยนของคุณเรียกกลับกันcallback = tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=3)ฉันคิดว่ารุ่นของคุณหยุดตอนที่ยังห้องสำหรับ emprovement.
2021-11-21 14:20:14

ขอบคุณฉันต้องใช้ dropout และมันได้ผลแล้วรวมทั้งเททด้วย
Reem

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่