2015-10-20 23 views
8

GoogLeNet'i Caffe ile Çok etiketli sınıflandırma yapmak için ince ayar yapmak istiyorum. Bunu tek etiketli bir sınıflandırmaya zaten ayarlamıştım, ancak henüz Multi-label'e geçiş yapamıyorum. farklı yapıyorumCaffe ile çoklu etiket sınıflandırması

ana adımlar:

Veriler için LMDB oluştur & Ground Truth

Ben Verilerle bir LMDB oluşturmak için kod here ve here değiştirilmeye devam ve yer gerçeği ile diğer . train_val.prototxt güncellenmesi SigmoidCrossEntropyLoss

ile SoftmaxWithLoss değiştirilmesi

ben SigmoidCrossEntropyLoss için SoftmaxWithLoss katmanları değiştirmek, ve her iki DB yüklenir, böylece veri katmanlarının. Tek etiketli sınıflandırma problemi ile yaptığım gibi öğrenme hızı parametrelerini belirledim.

Bu adımlar çalışıyor gibi görünüyor. Veri akışı ve solver.step (1) gerçekleştirmek mümkündür. Verileri doğrulamak ve etiketler doğru şekilde yüklenmek için, formül kullanarak kaybı açıkça hesapladım ve Caffe ile aynı sonucu aldım.

Sorun

Ağ yakınsama değil. Yinelemelerin birkaç hundra'ını çalıştırarak, sınıf sınıfının etrafında farklı sınıfların ortalamaları. Yani, a sınıfı, popülasyonda 0.35 1 ve 0.65 0'lara sahipse, ağ, gerçek etikete bakılmaksızın, her gözlem için ~ 0.35 sınıflandırma olasılığına yaklaşacaktır.

Olası hata 1

ben GoogLeNet onlardan öğrenebilir modeli pretrained bir şekilde doğru caffe içine görüntüleri yüklemek için başarısız çünkü sorundur şüpheli. Şimdiye kadar elde ettiğim deneyimlerim mükemmel çalışan convert_imageset. Şu anda LMDB içine görüntüleri kaydetmek için Shelhamer kodu kullanıyorum: Resim yüklenirken

im = np.array(Image.open(os.path.join(data_dir,in_))) 
im = im[:,:,::-1] 
im = im.transpose((2,0,1)) 
im_dat = caffe.io.array_to_datum(im) 
in_txn.put('{:0>10d}'.format(in_idx), im_dat.SerializeToString()) 

ben veri katmanında ortalama normalize. Bu doğru görünüyor mu? Bunu yapmanın başka bir yolu var mı?

Olası hata 2

Ayrıca train_val.prototxt yanlış tanımlanmış edildiğini olabilir. SoftmaxWithLoss -> SigmoidCrossEntropyLoss 'u değiştirmek yerine yapılması gereken başka bir şey var mı?

Herhangi bir yardım büyük takdir edilecektir! Teşekkürler! GoogLeNet veri girişi olarak

+2

bir "hepsi 1" tahmini ile takılıp senin ağ gibi görünüyor. Degradelerin parametrelerin anlamsız bölgelere kayması çok yüksek olabilir. Eğitim kaybıyla tekrarlama sayısı grafiğini çizebilir misin? Öğrenme oranını bir ya da iki * emir büyüklüğü ile azaltmayı deneyeceğim ve yeniden eğitime başlayacağım, modelin tekrar takılıp takılmadığını kontrol ediyorum. – Shai

+1

Ağınız yakınsak değilse, öğrenme oranını kontrol etmelisiniz. Genel olarak ince ayar için, daha düşük bir öğrenme oranına sahip olmalısınız (ya da başlamak için hızlı bir öğrenme oranı ve hızlı bir azalma). Tren kaybı çağlar boyunca artarsa, öğrenme oranınızın çok yüksek olduğunun bir göstergesidir. – user3334059

+0

Bu sorunu gördünüz mü? https://github.com/BVLC/caffe/issues/2407 – ginge

cevap

0

ortalama ile çıkarılmalıdır:

... 
im = im.transpose((2,0,1)) 
mean = np.array((104,117,123)) 
im -= mean 
im_dat = caffe.io.array_to_datum(im) 
...