Tôi đang cố gắng đào tạo triển khai Keras này của Deeplabv3 + trên Pascal VOC2012, bằng cách sử dụng mô hình đã được sàng lọc (cũng được đào tạo trên tập dữ liệu đó).
Tôi đã nhận được kết quả kỳ lạ với độ chính xác nhanh chóng hội tụ đến 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
Kiểm tra mô hình cũng cho độ chính xác 100%.
Tôi quyết định vẽ các dự đoán trên cùng một tập hợp các hình ảnh ngẫu nhiên trước và sau khi đào tạo, và thấy rằng mô hình được khuyến khích nói mọi thứ chỉ là nền tảng (đó là lớp 1 trong Pascal VOC2012).
Tôi còn khá mới mẻ với việc học sâu và sẽ cần giúp đỡ để tìm ra điều này có thể đến từ đâu.
Tôi nghĩ rằng có lẽ nó có thể là chức năng mất của tôi, mà tôi định nghĩa là:
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))
Tôi có một chút không chắc chắn về việc liệu tenors của tôi có đúng hình dạng hay không. Tôi đang sử dụng API tập dữ liệu của TF để tải .tfrecord
các tệp và tenxơ chú thích của tôi có hình dạng (batch_size, height, width)
. Sẽ (batch_size, height, width, 21)
là những gì cần thiết? Các lỗi khác từ bên trong mô hình phát sinh khi tôi cố tách hình ảnh chú thích thành một tenxơ chứa 21 hình ảnh (một cho mỗi lớp):
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"]()]]
Cảm ơn sự giúp đỡ của bạn!