ฉันพยายามฝึกอบรมการใช้งาน 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"]()]]
ขอขอบคุณสำหรับความช่วยเหลือของคุณ!