2017-05-04 1 views
0

Pourquoi ce code fonctionne correctement pour la fonction de perte, mais les métriques échouent après une itération avec "ValueError: les opérandes ne peuvent pas être diffusés avec des formes (32,) (24,) (32,)"?Pourquoi la mesure personnalisée de mon keras ne fonctionne-t-elle pas?

Si j'utilise "categorical_crossentropy" entre guillemets alors cela fonctionne. Et ma métrique personnalisée est identique à celle de 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) 

Répondre

0

Cela fonctionne si j'importe categorical_crossentropy de keras.metrics; plutôt que d'importer K. Toujours aucune idée pourquoi ce qui précède ne fonctionne pas, mais au moins c'est une solution.

De même, il semble que la fonction de perte ne soit pas nécessaire dans le paramètre métriques, car elle est automatiquement calculée et affichée pour l'apprentissage et la validation.