Keras'ta test verilerinin akışıyla ilgili predict_generator ile tahminler nasıl alınır?


16

In Keras sıfırdan eğitim convnets blog , kod gösterileri yalnızca ağ eğitim ve doğrulama verilerinin üzerinde çalışan. Test verileri ne olacak? Doğrulama verileri test verileriyle aynı mıdır (sanmıyorum). Tren ve doğrulama klasörleriyle benzer satırlarda ayrı bir test klasörü varsa, test verileri için bir karışıklık matrisi nasıl elde edilir. Bunu yapmak için scikit öğrenmesi veya başka bir paket kullanmamız gerektiğini biliyorum, ama test verileri için sınıf bilge olasılık çizgisi boyunca bir şey nasıl alabilirim? Bunu karışıklık matrisi için kullanmayı umuyorum.


1
Model.predict_generator (...) işlevini, test kümesini içeren bir dizinden veri okuyan bir oluşturucu ile çağırabilirsiniz. Bir karışıklık matrisini hesaplamak için kullanabileceğiniz tahminleri döndürür. Aradığın şey bu mu? Dokümanlar için buraya bakın: keras.io/models/sequential
stmax

1
Evet, gördüm. predict_generator, 0 ile 1 arasında bir kayan nokta değeri listesi olan tahminlerin bir listesini döndürür. Bunu nasıl yorumlayabilirim? Konfüzyon matrisi ile doğrudan kullanılamaz.
Raghuram

2
Henüz predict_generator denemedim (oldukça yeni), ama sınıf olasılıkları geri dönmek gibi görünüyor. <= 0,5 ila 0 ve> 0,5 ila 1 değerlerini dönüştürmeyi deneyin. 0 ve 1'lerden oluşan bir listeniz olduğunda, karışıklık matrisini hesaplama işlevine besleyebilirsiniz.
stmax

2
Bir kenara, bu iki sınıf problemi için iyi çalışır, ama ikiden fazla sınıf varsa ne olur?
Raghuram

1
İkiden fazla sınıf varsa, ağınızın birden fazla çıkışa ihtiyacı vardır. N sınıfı için n çıktısı vardır ve en yüksek çıktıya sahip olan sınıfı tahmin edersiniz. Softmax fonksiyonuna bir göz atın ( en.wikipedia.org/wiki/Softmax_function ).
stmax

Yanıtlar:


15

Test verilerinden bir karışıklık matrisi elde etmek için iki adım atmanız gerekir:

  1. Test verileri için tahminler yapın

Örneğin model.predict_generator, test üreticisinden ilk 2000 olasılığı tahmin etmek için kullanın .

generator = datagen.flow_from_directory(
        'data/test',
        target_size=(150, 150),
        batch_size=16,
        class_mode=None,  # only data, no labels
        shuffle=False)  # keep data in same order as labels

probabilities = model.predict_generator(generator, 2000)
  1. Etiket tahminlerine dayalı olarak karışıklık matrisini hesaplayın

Örneğin, olasılıkları sırasıyla 1000 kedi ve 1000 köpek olduğu durumla karşılaştırın.

from sklearn.metrics import confusion_matrix

y_true = np.array([0] * 1000 + [1] * 1000)
y_pred = probabilities > 0.5

confusion_matrix(y_true, y_pred)

Test ve doğrulama verileri hakkında ek not

Keras belgeleri üç farklı veri kümesi kullanır: eğitim verileri, doğrulama verileri ve test verileri. Egzersiz verileri, model parametrelerini optimize etmek için kullanılır. Doğrulama verileri meta parametreler, örneğin dönem sayısı gibi seçimler yapmak için kullanılır. Bir modeli en uygun meta parametrelerle optimize ettikten sonra, test verileri model performansının adil bir tahminini almak için kullanılır.


2
Kod parçacıkları için teşekkürler. Bu ikisini bağlayabilir misiniz? Örneğinizde, y_true kukla verilerle doldurulmuş gibi görünüyor. Diziyi doldurmak için generator.classes kullanır mısınız?
Gegenwind

np.array([0] * 1000 + [1] * 1000)generator.classes
Emin

2

İşte benim için çalıştı ve çalıştı bazı kod:

pred= model.predict_generator(validation_generator, nb_validation_samples // batch_size)
predicted_class_indices=np.argmax(pred,axis=1)
labels = (validation_generator.class_indices)
labels2 = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]
print(predicted_class_indices)
print (labels)
print (predictions)

Daha sonra şunları kullanabilirsiniz:

print (confusion matrix(predicted_class_indices,labels)

shuffle=FalseTest üreticinizde (benim durumumda doğrulama üreteci) kullandığınızdan emin olun ve validation_generator.reset()tahminlerinizi yapmadan önce kullanarak sıfırlayın .


0

Karışıklık matrisi için sklearn paketini kullanmalısınız. Keras'ın bir karışıklık matrisi sağlayabileceğini sanmıyorum. Test setindeki değerleri tahmin etmek için test seti için tahminler oluşturmak üzere model.predict () yöntemini çağırmanız yeterlidir. Çıktı değerlerinin türü, model türünüze bağlıdır, örn. Ayrık veya olasılıklar.


Cevap için teşekkürler. Keras'ın kendi karışıklık matrisi paketinin olmadığını biliyorum. Benim sorum model.predict_generator, karışıklık matrisini hesaplamak için kullanılamayan kayan nokta değerlerinin bir listesini döndürür.
Raghuram

Ne tür veriler üzerinde deney yapıyorsunuz?
enterML

Görüntüler üzerinde çalışıyorum.
Raghuram
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.