ทำไมโมเดล Keras ของฉันเรียนรู้ที่จะจำพื้นหลัง


9

ฉันพยายามฝึกอบรมการใช้งาน Keras ของ Deeplabv3 +บน Pascal VOC2012 โดยใช้แบบจำลองที่ได้รับการฝึกอบรม (ซึ่งได้รับการฝึกฝนในชุดข้อมูลนั้นด้วย)

ฉันได้ผลลัพธ์แปลก ๆ ด้วยความแม่นยำที่บรรจบกันอย่างรวดเร็วเป็น 1.0:

5/5 [==============================] - 182s 36s/step - loss: 26864.4418 - acc: 0.7669 - val_loss: 19385.8555 - val_acc: 0.4818
Epoch 2/3
5/5 [==============================] - 77s 15s/step - loss: 42117.3555 - acc: 0.9815 - val_loss: 69088.5469 - val_acc: 0.9948
Epoch 3/3
5/5 [==============================] - 78s 16s/step - loss: 45300.6992 - acc: 1.0000 - val_loss: 44569.9414 - val_acc: 1.0000

การทดสอบตัวแบบยังให้ความแม่นยำ 100%

ฉันตัดสินใจที่จะพล็อตการทำนายในภาพสุ่มชุดเดียวกันก่อนและหลังการฝึกอบรมและพบว่าแบบจำลองได้รับการสนับสนุนให้พูดว่าทุกอย่างเป็นเพียงพื้นหลัง (นั่นคือคลาสที่ 1 ใน Pascal VOC2012)

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ฉันค่อนข้างใหม่ในการเรียนรู้อย่างลึกล้ำและต้องการความช่วยเหลือในการค้นหาว่าสิ่งนี้จะมาจากไหน

ฉันคิดว่าบางทีมันอาจเป็นฟังก์ชั่นการสูญเสียของฉันซึ่งฉันกำหนดไว้เป็น:

def image_categorical_cross_entropy(y_true, y_pred):
    """
    :param y_true: tensor of shape (batch_size, height, width) representing the ground truth.
    :param y_pred: tensor of shape (batch_size, height, width) representing the prediction.
    :return: The mean cross-entropy on softmaxed tensors.
    """
    return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true))

ฉันมีความไม่แน่ใจเล็กน้อยเกี่ยวกับว่าเทนเซอร์ของฉันมีรูปร่างที่ถูกต้องหรือไม่ ฉันใช้ TF ของชุด API เพื่อโหลดไฟล์และเมตริกซ์คำอธิบายประกอบของฉันคือของรูปร่าง.tfrecord (batch_size, height, width)จะ(batch_size, height, width, 21)ต้องมีอะไรบ้าง? ข้อผิดพลาดอื่น ๆ จากภายในตัวแบบเกิดขึ้นเมื่อฉันพยายามที่จะแยกภาพคำอธิบายประกอบเป็นเทนเซอร์ที่มี 21 ภาพ (หนึ่งสำหรับแต่ละชั้น):

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [12,512,512,21] vs. [12,512,512]
         [[Node: metrics/acc/Equal = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/ArgMax, metrics/acc/ArgMax_1)]]
         [[Node: training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1/_13277 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:1", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_62151_training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:1"]()]]

ขอขอบคุณสำหรับความช่วยเหลือของคุณ!


5
สิ่งที่ควรพิจารณาในที่นี้คือเกือบจะไม่รู้ว่าจะเริ่มจากตรงไหน (1) คุณกำลังใช้ขนาดตัวอย่าง 5 สำหรับการฝึกอบรมหรือไม่? (2) คุณกำลังทำอะไรกับการประมวลผลล่วงหน้ากับภาพของคุณ? ฉันรู้สึกว่าคำตอบอยู่ภายในสิ่งนี้และ (3) คุณจะต้องให้ข้อมูลเพิ่มเติมกับแบบจำลองของคุณ คุณมีตัวอย่างที่มีป้ายกำกับจำนวนเท่าใด มีกี่หมวดหมู่ที่เป็นไปได้ คุณมีชุดการฝึกที่สมดุลหรือไม่? (4) ความแม่นยำของคุณที่ 1.0 หมายถึงไม่มีอะไรเลยเพราะการสูญเสียของคุณนั้นสูงมากและเพิ่มมากขึ้น การสูญเสียของคุณควรลดลงเมื่อความแม่นยำของคุณดีขึ้น
I_Play_With_Data

(1) ฉันใช้แบตช์ขนาด 12 แต่ฉันคิดว่ามันไม่เกี่ยวข้องเลย ฉันแสดงเพียงช่วงเวลา 3 ยุคเล็ก ๆ เพียง 5 ขั้นตอนเท่านั้นเพราะนั่นเป็นการบรรจบกันอย่างรวดเร็ว (2) การประมวลผลล่วงหน้าของฉันประกอบด้วยการเพิ่มและลดขนาด (การครอบตัด) เป็น 512x512 สำหรับภาพทุกภาพและคำอธิบายประกอบที่เกี่ยวข้อง (3) มีภาพที่มีป้ายกำกับประมาณ 11,500 ภาพใน Pascal VOC 2012 ได้รับเอกสารส่วนใหญ่สูงถึง 85% + mIOU ในชุดข้อมูลนี้ฉันคิดว่ามันมีความสมดุล มี 20 หมวดหมู่ที่แตกต่างกันในชุดข้อมูลนี้บวกหนึ่งสำหรับพื้นหลังหรือ«คลุมเครือ»รวม 21.
Matt

ฉันอยากรู้อยากเห็น คุณพบสาเหตุของผลลัพธ์ของโมเดลของคุณหรือไม่
Mark.F

3
หากคุณแชร์รหัสของคุณเป็นไปได้ที่จะพบข้อผิดพลาด
Dmytro Prylipko

1
ความจริงที่ว่าแบบจำลองที่ผ่านการฝึกอบรมล่วงหน้าพบวิธีที่จะได้รับความถูกต้อง 100% ภายใน 3 ยุคโดยใช้ข้อมูลเดียวกับที่ใช้ในตอนแรกทำให้ฉันคิดว่าข้อผิดพลาดก็คือฉลากฝึกอบรมของคุณไม่ถูกต้อง เป็นพื้นหลัง ไม่ว่าในกรณีใดก็ตามให้ดูที่หัวข้อปัญหานี้ที่ผู้คนพูดคุยปัญหาและวิธีแก้ไขปัญหาของพวกเขาสำหรับการปรับแต่งโมเดล โมเดลไม่จำเป็นต้องเสียและข้อผิดพลาด batchnorm ใน Tensorflow สามารถแก้ไขได้
n1k31t4

คำตอบ:


1

โมเดลของคุณกำลัง overfitting แต่ละยุคมีเพียง 5 ภาพเท่านั้น รูปแบบคือ "ท่องจำ" คำตอบสำหรับแต่ละภาพ

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.