Keras modelim arka planı neden tanımayı öğreniyor?


9

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).

resim açıklamasını buraya girin

resim açıklamasını buraya girin

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. .tfrecordDosyaları 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!


5
Burada dikkate alınması gereken birkaç öğe, nereden başlayacağımı neredeyse bilmiyorum (1) eğitim için 5 örnek boyutu kullanıyor musunuz ??? (2) Varsa, görüntülerinize ön işleme ne yapıyorsunuz? Cevabın bunun içinde olduğunu ve (3) modeliniz hakkında çok daha fazla bilgi vermeniz gerektiğini hissediyorum. Kaç etiketli örneğiniz var? Kaç olası kategori var? Dengeli bir eğitim setiniz var mı? (4) 1.0 hassasiyetiniz temelde hiçbir şey ifade etmez, çünkü kaybınız süper yüksek ve artar. Kişisel kaybı gerektiğini azaltmak için doğruluk geliştikçe.
I_Play_With_Data

(1) Ben 12 büyüklükteki partiler kullanıyorum ama bence bu alakasız. Burada sadece 5 adımlık 3 küçük dönem gösterdim çünkü bu ne kadar çabuk birleşiyor. (2) Önişlemim, her görüntü ve ilişkili ek açıklama için 512x512'ye kadar bir miktar büyütme ve yeniden ölçeklendirme (muhtemelen kırpma) içeriyor. (3) Pascal VOC 2012'de yaklaşık 11.500 etiketli görüntü vardır. Çoğu makalenin bu veri kümesinde% 85 + mIOU'ya ulaştığı kabul edilirse, dengeli olduğunu varsayabilirim. Bu veri kümesinde 20 farklı kategorinin yanı sıra arka plan veya "belirsiz" olmak üzere toplam 21 kategori bulunmaktadır.
Matt

Ben merak ediyorum. Modelinizin sonuçlarının nedenini buldunuz mu?
Mark.F

3
Kodunuzu paylaştıysanız, hatayı bulmak mümkün olabilir.
Dmytro Prylipko

1
Önceden eğitilmiş bir modelin, başlangıçta kullanılanla aynı verileri kullanarak 3 dönem içinde% 100 doğruluk elde etmenin bir yolunu bulması gerçeği, hatanın eğitim etiketlerinizin yanlış olduğunu, belki de karşılık gelen etikete ayarlandığını düşündürüyor. arka. Her durumda, insanların sorunları ve modelin ince ayarını yapmak için çözümlerini tartıştığı bu konu başlığına bir göz atın . Model mutlaka kırılmaz ve Tensorflow'daki batchnorm hatası giderilebilir.
n1k31t4

Yanıtlar:


1

Modeliniz aşırı uyuyor. Her çağda sadece 5 resim vardır. Model her görüntü için cevabı "ezberliyor".

Aşırı takılma şansını en aza indirmek için görüntü sayısını artırın. Her nesne kategorisi için birkaç bin örnek resim olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.