Bu Keras'ın Deeplabv3 + uygulamasını geliştirmeye çalışıyorum uygulamasını Pascal VOC2012 üzerinde, önceden eğitilmiş modeli (ve bu veri seti üzerinde eğitilmiş) kullanarak eğitmeye çalışıyorum.
Hızla 1.0 yakınlaşan doğruluk ile garip sonuçlar var:
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
Modelin test edilmesi de% 100 doğruluk sağlar.
Eğitimden önce ve sonra aynı rastgele görüntüler üzerinde tahminler çizmeye karar verdim ve modelin her şeyin sadece arka plan olduğunu söylemeye teşvik edildiğini gördüm (Pascal VOC2012'deki 1. sınıf).
Derin öğrenme konusunda oldukça yeniyim ve bunun nereden gelebileceğini bulmak için yardıma ihtiyacım var.
Belki de şu şekilde tanımladığım kayıp fonksiyonum olabileceğini düşündüm:
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))
Tensörlerimin doğru şekle sahip olup olmadığından biraz emin değilim. .tfrecord
Dosyaları yüklemek için TF'nin veri kümesi API'sini kullanıyorum ve ek açıklama tensörünüz şekil veriyor (batch_size, height, width)
. (batch_size, height, width, 21)
Ne gerekli olurdu ? Ek açıklama görüntüsünü 21 resim (her sınıf için bir tane) içeren bir tensöre ayırmaya çalıştığımda modelin içindeki diğer hatalar ortaya çıkıyor:
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"]()]]
Yardımın için teşekkürler!