Ich konnte niemanden mit diesem Problem finden, also frage ich. Ich möchte eine benutzerdefinierte Verlustfunktion in Keras/Tensorflow implementieren, die verschiedene Spalten der y-Werte unterschiedlich behandelt. Ich habe gelesen, dass dies nicht sofort möglich war, da die Keras-Loss-Funktion nur zwei Parameter y_pred
und y_true
akzeptiert.Keras benutzerdefinierte Verlustfunktion mit zwei Eingängen
Aber ich habe versucht, diese auf zwei Eingänge zu teilen, um zu erreichen, was ich will.
def noise_loss_fct9(y_true, y_pred):
lmbd = 1.0
border = 9
y_true_measurement = y_true[:, :border]
y_true_process = y_true[:, border:]
y_pred_measurement = y_pred[:, :border]
y_pred_process = y_pred[:, border:]
error_measurement = K.mean(K.square(
y_true_measurement - y_pred_measurement
), axis=-1)
error_process = K.mean(K.square(
y_true_process - y_pred_process
), axis=-1)
return error_measurement + lmbd * error_process
Auch wenn diese Verlustfunktion in der log zusammengestellt erhält es zeigt nan
als Verlust.
Epoch 1/10
95s - loss: nan
Epoch 2/10
87s - loss: nan
Bedeutet dies, dies überhaupt kein gültiger Weg ist (auch wenn das Modell kompiliert) oder ist er gerade nicht den Verlust aus irgendeinem Grunde zeigt? Was sonst sollte ich tun, wenn dies nicht ist
Ich bin dankbar für Kommentare.
Haben Sie überprüft, ob Sie irgendwelche 'Nan's in Ihrem Datensatz hatten? Beginnt es mit der ersten Charge? Funktioniert es mit "Loss" auf "Mse"? –