comment mettre en œuvre des mesures personnalisées dans keras?
J'obtiens cette erreur :
somme() a obtenu un inattendu argument mot-clé "out"
lorsque j'exécute ce code:
import pandas as pd, numpy as np
import keras
from keras.layers.core import Dense, Activation
from keras.models import Sequential
def AUC(y_true,y_pred):
not_y_pred=np.logical_not(y_pred)
y_int1=y_true*y_pred
y_int0=np.logical_not(y_true)*not_y_pred
TP=np.sum(y_pred*y_int1)
FP=np.sum(y_pred)-TP
TN=np.sum(not_y_pred*y_int0)
FN=np.sum(not_y_pred)-TN
TPR=np.float(TP)/(TP+FN)
FPR=np.float(FP)/(FP+TN)
return((1+TPR-FPR)/2)
# Input datasets
train_df = pd.DataFrame(np.random.rand(91,1000))
train_df.iloc[:,-2]=(train_df.iloc[:,-2]>0.8)*1
model = Sequential()
model.add(Dense(output_dim=60, input_dim=91, init="glorot_uniform"))
model.add(Activation("sigmoid"))
model.add(Dense(output_dim=1, input_dim=60, init="glorot_uniform"))
model.add(Activation("sigmoid"))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=[AUC])
train_df.iloc[:,-1]=np.ones(train_df.shape[0]) #bias
X=train_df.iloc[:,:-1].values
Y=train_df.iloc[:,-1].values
print X.shape,Y.shape
model.fit(X, Y, batch_size=50,show_accuracy = False, verbose = 1)
Est-il possible de mettre en œuvre une métrique personnalisée à part de faire une boucle sur les lots et modifier le code source?
OriginalL'auteur Philippe C | 2016-06-06
Vous devez vous connecter pour publier un commentaire.
Ce code ne fonctionne pas car
y_pred
ety_true
ne sont pas des tableaux numpy mais soit Théano ou Tenseur de Flux de tenseurs. C'est pourquoi vous avez eu cette erreur.Vous pouvez définir vos mesures personnalisées, mais vous devez vous rappeler que ses arguments sont ceux Tenseurs - pas de tableaux numpy.
Vous devez penser à un tenseur d'une variable algébrique. Vous ne pouvez pas transformer un tableau numpy pour tenseur. On ne pouvait attribuer le tableau numpy comme une valeur d'un tenseur.
Je ne veux pas transformer un tableau numpy pour un tenseur mais dans l'autre sens. Si nous prenons l'OP de la fonction, j'ai essayé:
def AUC(y_true,y_pred): numpy_y_true = y_true.eval() ... return ...
mais il ne fonctionne pas. Comment voulez-vous résoudre OP problème?Une métrique personnalisée ne peut pas être un nombre typique-le retour de fonction. Même "def asc(y_true, y_pred): return 1.0" ne fonctionne pas. La métrique de la fonction est appelée au moment de la compilation une fois, avant que tous les exemples d'apprentissage sont considérés.
C'est vrai. Mais encore entrées doivent être tenseurs
OriginalL'auteur Marcin Możejko
Ici, je vais répondre à l'OP de la question le sujet plutôt que son problème exact. Je suis en train de faire ce que la question s'affiche en haut quand je google le sujet problème.
Vous pouvez mettre en œuvre une métrique personnalisée de deux façons.
Comme mentionné dans Keras docu.
Mais ici, vous devez vous rappeler que mentionné dans Marcin Możejko réponse que
y_true
ety_pred
sont des tenseurs. Afin de calculer correctement la métrique, vous devez utiliserkeras.backend
fonctionnalité. S'il vous plaît regardez ce DONC, la question pour plus de détails Comment calculer F1 Macro dans Keras?Ou vous pouvez la mettre en œuvre dans un hacky façon comme mentionné dans Keras GH problème. Pour cela, vous devez utiliser
callbacks
argument demodel.fit
.OriginalL'auteur vogdb
vous pouvez passer d'un modèle.predict() dans votre AUC métrique de la fonction. [cela va itérer sur bacthes de sorte que vous feriez mieux d'utiliser le modèle.predict_on_batch(). En supposant que vous avez quelque chose comme un softmax de la couche de sortie (quelque chose que les sorties de probabilités), alors vous pouvez l'utiliser avec sklearn.métrique pour obtenir de l'ASC.
de ici
maintenant faire de votre métrique
OriginalL'auteur ahmedhosny