Keras kaybı ve ölçüm değerleri her birinde aynı işlevle eşleşmiyor
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 loss
ve val_loss
modeli tarihinin. Bir akıl sağlığı kontrolü olarak, model eğitimi bitirdiğinde kullanıyorum, model.predict(X_val)
böylece custom_fn
eğ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_loss
en 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_loss
ve val_custom_fn
uyuşmuyor (ne loss
ya da loss_custom_fn
bu konuda).
Bu benim, gerçekten tuhaf custom_fn
inşa esasen keras' olduğu mape
ile y_true
ve y_pred
hafif manipüle. burada neler oluyor?
Not : Kullandığım katmanlar LSTM
katmanlar ve son Dense
katmandı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_fn
Keras'ın yerleşik mape
bir 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, ModelCheckpoint
geri aramanın kaldırılması aynı etkiye sahiptir; val_loss
ve val_mape
her ç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
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_loss
ve val_custom_fn
tam olarak eşleştiğinden bu yana devam ediyor gibi görünüyor .
Kolay bir çözüm, ya custom_fn
bir 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_loss
her dönemi eğittikten sonra doğru olanı manuel olarak hesaplayın . İkincisi, custom_fn
hem 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.