Eğitim sırasında loss değeri düşmüyor


#1

Merhabalar,

1000’e yakın etiketlenmiş resim ile kendi SSDLite Mobilenet modelimi Colab üzerinde eğitmeye çalışıyorum. Ancak loss değeri düşmüyor ve aşağı doğru bir eğilim de göstermiyor. Düzensiz gibi gözüküyor. Aynı veriler ile FasterRCNN modeli de eğittim. Onda loss değeri belli bir adım sonunda 0’a yaklaştı ve test verileri ile başarılı sonuç elde edebildim. Buradaki sorun ne olabilir?

#Düzeltme
Tek bir nesne için (person) Tensorflow Object Detection API ile eğitimi gerçekleştirmeye çalışıyorum. Udemy’deki bir kursu takip ediyorum. Yapılan işlemler linkteki ile aynı : https://blogs.msdn.microsoft.com/esmsdn/2018/04/09/post-invitado-part2-step-by-step-how-to-training-your-own-detector-classifier/

Colab üzerinde Tensorboard’ı açamadım. Çeşitli adımlardaki loss değerlerini paylaşıyorum:
INFO:tensorflow:global step 1: loss = 3.6780 (17.007 sec/step)
INFO:tensorflow:global step 2: loss = 4.5172 (5.016 sec/step)
INFO:tensorflow:global step 3: loss = 3.7465 (4.929 sec/step)
INFO:tensorflow:global step 4: loss = 6.2116 (4.941 sec/step)
INFO:tensorflow:global step 5: loss = 6.0055 (4.949 sec/step)
INFO:tensorflow:global step 6: loss = 6.8028 (4.936 sec/step)
INFO:tensorflow:global step 7: loss = 7.9685 (4.948 sec/step)
INFO:tensorflow:global step 8: loss = 11.1110 (4.970 sec/step)
INFO:tensorflow:global step 9: loss = 8.6589 (4.966 sec/step)
INFO:tensorflow:global step 10: loss = 8.2527 (4.982 sec/step)
INFO:tensorflow:global step 11: loss = 19.0431 (4.919 sec/step)
INFO:tensorflow:global step 12: loss = 9.1849 (4.904 sec/step)
INFO:tensorflow:global step 13: loss = 11.8726 (4.940 sec/step)
INFO:tensorflow:global step 14: loss = 10.5037 (4.949 sec/step)
INFO:tensorflow:global step 15: loss = 9.8409 (4.959 sec/step)
INFO:tensorflow:global step 16: loss = 9.7971 (4.933 sec/step)
INFO:tensorflow:global step 17: loss = 9.7769 (4.916 sec/step)
INFO:tensorflow:global step 479: loss = 7.2604 (4.988 sec/step)
INFO:tensorflow:global step 480: loss = 6.0157 (4.975 sec/step)
INFO:tensorflow:global step 481: loss = 8.0976 (4.952 sec/step)
INFO:tensorflow:global step 482: loss = 7.1114 (5.009 sec/step)
INFO:tensorflow:global step 483: loss = 8.1089 (5.016 sec/step)
INFO:tensorflow:global step 484: loss = 8.2080 (5.018 sec/step)
INFO:tensorflow:global step 485: loss = 7.7016 (4.973 sec/step)
INFO:tensorflow:global step 1278: loss = 8.9090 (5.030 sec/step)
INFO:tensorflow:global step 1279: loss = 5.1484 (5.015 sec/step)
INFO:tensorflow:global step 1280: loss = 8.9331 (4.991 sec/step)
INFO:tensorflow:global step 1281: loss = 5.7098 (4.953 sec/step)
INFO:tensorflow:global step 1282: loss = 6.1666 (4.989 sec/step)
INFO:tensorflow:global step 1283: loss = 5.8109 (4.961 sec/step)
INFO:tensorflow:global step 2297: loss = 9.3506 (5.037 sec/step)
INFO:tensorflow:global step 2298: loss = 5.1929 (5.001 sec/step)
INFO:tensorflow:global step 2299: loss = 8.3896 (4.996 sec/step)
INFO:tensorflow:global step 2300: loss = 4.2508 (5.028 sec/step)
INFO:tensorflow:global step 2701: loss = 5.4318 (7.413 sec/step)
INFO:tensorflow:global step 2702: loss = 9.3519 (5.953 sec/step)
INFO:tensorflow:global step 2703: loss = 4.4171 (5.156 sec/step)
INFO:tensorflow:global step 2704: loss = 5.3354 (5.122 sec/step)
INFO:tensorflow:global step 2705: loss = 15.8924 (5.152 sec/step)
INFO:tensorflow:global step 2706: loss = 5.1982 (5.143 sec/step)
INFO:tensorflow:global step 2707: loss = 2.2758 (5.149 sec/step)
INFO:tensorflow:global step 3286: loss = 5.6927 (5.131 sec/step)
INFO:tensorflow:global step 3287: loss = 3.3677 (5.095 sec/step)
INFO:tensorflow:global step 3288: loss = 5.6580 (5.094 sec/step)
INFO:tensorflow:global step 3289: loss = 8.3517 (5.075 sec/step)
INFO:tensorflow:global step 3290: loss = 5.7972 (5.026 sec/step)


#2

Modelin kötüdür.

Modelin parametreleri kötüdür.

Training datası yetmiyordur.

Kısmetin kapalıdır.

Kod yerine, output olarak yazdırdığın ve hiç bir işe yaramayan logları buraya yapıştırdığın için belki Yüce Odin seni cezalandırıyordur.


#3

Object detection API’deki train.py ile eğitmeye çalışıyorum. Ekstra bir kod yazmadım. Config dosyasıda standart ssdlite_mobilenet_v2_coco.config dosyası. Sadece dosya yollarını ve image_resizer değerini değiştirdim.

Hiç bir işe yaramayan gereksiz cevabınız için de teşekkür ederim.


#4

Ben senin API kullandığını bilecek kadar müneccim değilim. Keza sorunu baştan okudum, hiç bir yerinde API yazmıyor; haliyle kodunu kendin yazmışsındır diye iyimser düşündüm. Yanılmışım. Hiç bir işe yaramayan cevap demişsin de öyle soruya böyle cevap derim sana. İşte bu yüzden gatekeeper gibi davranıyorum. Temel yok, ama ego seviyesi Everest. Sanki soruyu düzgün sordun da biz cevaplamadık.

Bak sevgili Sinan, Machine Learning dediğin olayın temelini bilmezsen, algoritma parametrelerinin dataset spesifik olduğunu ve o datasetler değiştiğinde sabit parametrelerle performanslarının değişebileceğini bilmezsen, hatta üstüne dataset size’ının bile overfitting/underfitting ile alakalı olduğundan haberdar değilsen; “training lossum niye değişmiyor” gibi genel bir soru sormak zorunda kalırsın.

Hazır modeller iyidir hoştur, kolaydır; ama şansına senin ilgilendiğin alanda çalışırsa öyledir. Zaten sorundan çıkarabildiğim tek şey o "FasterRCNN"de şansına hazır API çalışmış ama "SSDLite Mobilenet"te o kadar şanslı olamamışsın. O zaman “back to basics”. Önce kullanacağın modelin makalesini, blogunu, tutoriallını ve/veya her ne haltı varsa onu oku. Nasıl train etmişler onu öğren. Sonra kendi dataset’inle karşılaştır. Parametreleri Street Fighter oynarken kombo yapabilmek için bütün tuşlara basan maymun stili değil, akılcı bir şekilde değiştir. Baktın iyileşme var ama yetmedi dataset size’ını arttır (data augmentation diye bir olay var sonuçta). Hala istediğin sonucu alamadıysan da her model her datasette iyi çalışacak diye bir şey yok. Hele değişiklik yapamayacağın bir API kullanıyorsan bunu kabullen ve başka bir model/API ara.


#6

Bu daha açıklayıcı oldu. Teşekkürler. Dediğiniz gibi bu kadar şeyi biliyor olsam soru sormak zorunda kalmazdım. Yine de belitmek isterim ki üslübunun hiç hoş değil.


#7

Pek alakası olmayabilir ama , açıkcası tensorflow api kullanmaktan nefret ediyorum (Adamlar o kadar kompleks yazmışlarki ilk başlayanlar ne yaptığını anlamıyo bile sanki) Hatta tensorflow kulllanmaktan da nefret ediyorum. Size tavsiyem eğitim amaçlı ise keras kullanın hatta size “ssd keras” linki atabilirim ben şahsen kullandım. Kolayca modeli eğitir istediğinzi gibi modifiye edebilirsiniz. Eğer performans isterseniz ve yaptığınız işten zevkde alayım derseniz pytorch kullanın.

eğitim için harika bir repo : https://github.com/pierluigiferrari/ssd_keras
ssd-lite ve diğer birçok modeli bulabileceğiniz başka bir repo : https://github.com/tanakataiki/ssd_kerasV2


#9

Bu konu son cevaptan 60 dakika sonra otomatik olarak kapatıldı. Yeni cevap girilmesine izin verilmiyor.


#8

Cevabınız için teşekkür ederim. Loss, batch_size değerini yükselterek 2-3 seviyelerine kadar indi. Bu haliyle test ettiğimde yüksek doğrulukta sonuç elde edebildim. Gönderdiğiniz linkleri de inceleyeceğimiz.