2017-01-24 41 views
7

Neden karıştı: Ben örneklere Modelimin test edersenizKeras'ta yaptığım onaylama seçimim neden benim modelimin performansını değiştiriyor?

[A, B, C], belli bir doğruluk elde edecektir. Aynı modeli örneklerde [C, B, A] test edersem, aynı doğruluğu elde etmelidir. Başka bir deyişle, örnekleri karıştırmak modelimin doğruluğunu değiştirmemelidir. Ama bunun altında oluyor gibi görünüyor budur:

Adım adım: Ben modelin test nerede

İşte
model.fit_generator(batches, batches.nb_sample, nb_epoch=1, verbose=2, 
        validation_data=val_batches, 
        nb_val_samples=val_batches.nb_sample) 

olan üreticimizin olmadan: Ben modeli eğitmek nerede İşte

olduğunu doğrulama grubu:

0: Burada
gen = ImageDataGenerator() 
results = [] 
for _ in range(3): 
    val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2, 
              target_size=target_size, shuffle=False) 
    result = model.evaluate_generator(val_batches, val_batches.nb_sample) 
    results.append(result) 

sonuç (val_loss, val_acc) olan
[2.8174608421325682, 0.17300000002980231] 
[2.8174608421325682, 0.17300000002980231] 
[2.8174608421325682, 0.17300000002980231] 

Doğrulama kesinliklerinin aynı olduğuna dikkat edin.

[2.8174608802795409, 0.17299999999999999] 
[2.8174608554840086, 0.1730000001192093] 
[2.8174608268737793, 0.17300000059604645] 

Bildirim bu doğrulama doğrulukları: Burada

results = [] for _ in range(3): val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2, target_size=target_size, shuffle=True) result = model.evaluate_generator(val_batches, val_batches.nb_sample) results.append(result) 

sonuç (val_loss, val_acc) şunlardır: bir karıştırılan doğrulama seti ile, bir model test eder Burada

olduğu değişmemiş bir doğrulama setine ve değişmeyen bir modele rağmen, tutarsızdır. Neler oluyor?


Not:

Ben her zaman set tüm doğrulamada değerlendiriyorum. 'a eşit olan örnek sayısı modelini değerlendirdikten sonra model.evaluate_generator döndürür, bu da doğrulama kümesindeki örnek sayısıdır.

+0

Doğrulama ayarının her zaman değişmediğinden emin misiniz? Verileri her seferinde karıştırıyor ve alt örnekliyorsanız, bu ayar, test döngüsü boyunca her yinelemede farklı olabilir. – bnaecker

+0

Bir sorun görmüyorum, ketas'a veri kümesini karıştırmasını söylediniz ve bu da son çözümleri biraz değiştirecek. –

+0

Verileri örneklemiyorum. "değerlendir_generator", validabat kümesindeki örneklerin toplam sayısı olan "val_batches.nb_sample" örneklerindeki modeli değerlendirdikten sonra geri döner. Bu olsa da, bu çok gizlidir. Ben bunu adım adım daha açık yapacağım. Teşekkür ederim. –

cevap

9

Bu gerçekten ilginç bir sorundur. Bunun cevabı, bu sinir ağlarının float64 kadar doğru olmayan bir float32 formatını kullanmasıdır - bu gibi dalgalanmalar basitçe bir alt sınıf fenomeninin gerçekleşmesidir.

Kaybınızın olması durumunda - kesirli bir bölümün 7 ondalık basamağından sonra ortaya çıkan farklılıkların fark edildiğini fark edebilirsiniz - tam olarak ne float32 biçimindeki bir tamsayıdır. Yani - temel olarak - örneğinizde sunulan tüm sayıların float32 gösterim açısından eşit olduğunu varsayabilirsiniz.

+0

Bunun bir alt akış problemi olduğunu varsayarsak, shuffle = True 'ayarı shuffle = False' ayarlanmıyorken tutarsızlığa neden neden oluyor? Her neyse, bence haklısın. Vikipedi'den: "9'dan fazla önemli ondalık basamak kaydedilemez" ve doğrulukları için tutarsızlıkların 10. ondalık basamakta başladığını görüyorum. Kayıp değerleri hakkında biraz kafa karıştırıcıyım (ilk sütun). Tutarsızlıklar neden buradaki ondalık basamakta başlar ve doğruluklar için onuncu basamaktan başlar (ikinci sütun)? –

+0

Önemli ondalık basamaklar, numaranızın tamsayı kısmı içindir. Kesirli kısım için, hassaslığınız ~ 7.25 basamaktır (aynı makalede) –

+0

Bu cevabı kabul ettiğim için tereddüt ettim çünkü soruyu "Keras'ta benim onaylama sürecimi karıştırmak benim modelimin performansını nasıl değiştiriyor?" Diye unuttum. ve "Neden benim Keras'ta benim doğrulama setimi karıştırmak, bir alt probleme neden oluyor?" Bu cevap, asıl soruya, ima ettiği "Cevapsızdır. Sizin modelinizin performansı aynıdır." Ve yeni soruya bir cevap istiyorum, yeni bir soru yapmalıyım. –