Wenn individuellen Verlust und metrische Funktion in einem Keras Modell für beiden Fälle nehmen schaffen, die Eingänge von (y_true, y_pred)
:Keras: Metric und Verlust mit unterschiedlichem Eingang
def custom_loss(y_true, y_pred):
.
return loss
def custom_metric(y_true, y_pred):
.
return metric
und der Eingang der y_pred
ist der Ausgang der Model
. Beispiel:
model = Model(inputs = [input1,..inputN], outputs=loss)
model.compile(loss=costum_loss, metrics=costum_metric)
In diesem Fall oben für sowohl Verlust als auch Metrik ist y_pred der Verlust.
Was ist, wenn ich andere Eingabe in costum_loss
und andere in der costum_metric
wollen. Gibt es einen Weg, es zu tun?
bearbeiten:
Mehr speciffically möchte ich meinen Verlust sein:
def warp_loss(X):
z, positive_entity, negatives_entities = X
positiveSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(1,), name="positive_sim")([z, positive_entity])
z_reshaped = Reshape((1, z.shape[1].value))(z)
negativeSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(negatives_titles.shape[1].value, 1,), name="negative_sim")([z_reshaped, negatives_entities])
loss = Lambda(lambda x: max_margin_loss(x[0], x[1]), output_shape=(1,), name="max_margin")([positiveSim, negativeSim])
return loss
def mean_loss(y_true, y_pred):
return K.mean(y_pred - 0 * y_true)
und die Metrik:
def metric(X):
z, positive_entity, negatives_entities = X
positiveSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(1,), name="positive_sim")([z, positive_entity])
z_reshaped = Reshape((1, z.shape[1].value))(z)
negativeSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(negatives_titles.shape[1].value, 1,), name="negative_sim")([z_reshaped, negatives_entities])
position = K.sum(K.cast(K.greater(positiveSim, negativeSim), dtype="int32"), axis=1, keepdims=True)
accuracy = Lambda(lambda x: x/_NUMBER_OF_NEGATIVE_EXAMPLES)(position)
return accuracy
def mean_acc(y_true, y_pred):
return K.mean(y_pred - 0 * y_true)
So sind die ersten 4 Zeilen gleich sind und nach dem zwei Funktionen ändern sich. Könnte es möglich sein, einen Callback
zum Drucken mean_acc
zu verwenden?
Funktioniert Ihre benutzerdefinierte Funktion nicht von y_pred? –
Ich möchte 'y_pred' in diesen 2 Funktionen unterschiedlich sein. Die Verlustausgabe ist in diesem Fall keine tatsächliche Vorhersage. Sie können den Verlust in dieser Frage https://stackoverflow.com/questions/46447882/weights-of-cnn-model-go-to-really-small-values-and-after-nan überprüfen, dass Sie bereits kommentiert haben. –
Was möchten Sie als Eingaben für 'custom_loss' und' custom_metrics' verwenden ?. –