2017-05-04 2 views
0

Warum funktioniert dieser Code gut für die Verlustfunktion, aber die Metriken scheitern nach einer Iteration mit "ValueError: Operanden konnten nicht zusammen mit Shapes gesendet werden (32,) (24,) (32,)"?Warum funktioniert meine benutzerdefinierte Keras-Metrik nicht?

Wenn ich "categorical_crossentropy" in Anführungszeichen verwende, dann funktioniert es. Und meine benutzerdefinierte Metrik sieht genauso aus wie in keras.losses.

import keras.backend as K 
def categorical_crossentropy(y_true, y_pred): 
    return K.categorical_crossentropy(y_pred, y_true) 

fc.compile(optimizer=Adam(.01), loss=categorical_crossentropy, metrics=[categorical_crossentropy]) 
fc.fit(xtrain, ytrain, validation_data=(xvalid, yvalid), verbose=0, 
     callbacks=[TQDMNotebookCallback(leave_inner=True, leave_outer=True)], 
     nb_epoch=2) 

Antwort

0

Es funktioniert, wenn ich categorical_crossentropy von keras.metrics importieren; anstatt K zu importieren. Immer noch keine Ahnung, warum das Obige nicht funktioniert, aber zumindest ist das eine Lösung.

Auch sieht es so aus, als ob die Verlustfunktion in metrics-Parametern sowieso nicht notwendig ist, da sie automatisch berechnet und für Training und Validierung angezeigt wird.

Verwandte Themen