Keras kaybı ve ölçüm değerleri her birinde aynı işlevle eşleşmiyor

Aug 18 2020

Aşağıdaki gibi özel bir kayıp işlevine sahip keras kullanıyorum:

def custom_fn(y_true, y_pred):
   # changing y_true, y_pred values systematically
   return mean_absolute_percentage_error(y_true, y_pred)
   

O zaman arıyorum model.compile(loss=custom_fn)vemodel.fit(X, y,..validation_data=(X_val, y_val)..)

Keras sonra kaydediyor lossve val_lossmodeli tarihinin. Bir akıl sağlığı kontrolü olarak, model eğitimi bitirdiğinde kullanıyorum, model.predict(X_val)böylece custom_fneğitilmiş modeli kullanarak doğrulama kaybını manuel olarak hesaplayabiliyorum .

Bu geri aramayı kullanarak modeli en iyi dönemle kaydediyorum:

callbacks.append(ModelCheckpoint(path, save_best_only=True, monitor='val_loss', mode='min'))

bu nedenle bunu hesapladıktan sonra, doğrulama kaybı keras'ın val_lossen iyi dönemin değeriyle eşleşmelidir . Ama bu olmuyor.

Bu sorunu çözmek için başka bir girişim olarak, şunu da yapıyorum:

    model.compile(loss=custom_fn, metrics=[custom_fn])

Ve beni şaşırtıyor val_lossve val_custom_fnuyuşmuyor (ne lossya da loss_custom_fnbu konuda).

Bu benim, gerçekten tuhaf custom_fninşa esasen keras' olduğu mapeile y_trueve y_predhafif manipüle. burada neler oluyor?

Not : Kullandığım katmanlar LSTMkatmanlar ve son Densekatmandır. Ancak bu bilginin sorunla ilgili olmadığını düşünüyorum. Ayrıca normalleştirmeyi hiperparametre olarak kullanıyorum ama bırakma kullanmıyorum.

Güncelleme

custom_fnKeras'ın yerleşik mapebir kayıp işlevi ve bunun gibi bir metrik olarak kaldırılması ve kullanılması bile :

model.compile(loss='mape', metrics=['mape'])

ve basitlik açısından, ModelCheckpointgeri aramanın kaldırılması aynı etkiye sahiptir; val_lossve val_mapeher çağ için eşdeğer değildir . Bu benim için son derece garip. Ya bir şeyi özlüyorum ya da Keras kodunda bir hata var ... İlki daha gerçekçi olabilir.

Yanıtlar

3 user7331538 Aug 18 2020 at 19:34

Bu blog yazısı , keras'ın doğrulama kaybını hesaplarken eğitimde kullanılan herhangi bir düzenliliği eklediğini öne sürüyor. Ve tabii ki, tercih edilen metriği hesaplarken hiçbir düzenleme uygulanmaz. Bu nedenle, soruda belirtildiği gibi herhangi bir seçim kayıp fonksiyonu ile ortaya çıkar.

Bu, Keras'tan herhangi bir belge bulamadığım bir şey. Bununla birlikte, tüm düzenlenme hiperparametrelerini kaldırdığımdan beri , her çağda val_lossve val_custom_fntam olarak eşleştiğinden bu yana devam ediyor gibi görünüyor .

Kolay bir çözüm, ya custom_fnbir metrik olarak kullanmak ve en iyi modeli metriğe ( val_custom_fn) göre val_loss. Ya da her dönemi manuel olarak döngüleyin ve val_lossher dönemi eğittikten sonra doğru olanı manuel olarak hesaplayın . İkincisi, custom_fnhem metrik hem de kayıp işlevi olarak dahil etmek için bir neden olmadığından daha mantıklı görünüyor .

Herhangi biri bununla ilgili Keras belgelerinde yardımcı olabilecek herhangi bir kanıt bulabilirse.