ottengo questo errore:come implementare la metrica personalizzata in keras?
sum() ha ottenuto un argomento chiave inaspettato 'fuori'
quando si esegue questo codice:
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)
E 'possibile implementare un custom metrica oltre a fare un ciclo su lotti e modificare il codice sorgente?
Potrebbe forse elaborare come risolvere questo? Come posso trasformare un Tensore in una serie numpy? – ste
È necessario pensare a un tensore come variabile algebrica. Non è possibile trasformare l'array numpy in tensore. Si può solo assegnare l'array numpy come valore di un tensore. –
Non voglio trasformare una matrice numpy in un tensore ma viceversa. Se prendiamo la funzione di OP, ho provato: 'def AUC (y_true, y_pred): numpy_y_true = y_true.eval() ... return ...' ma non ha funzionato. Come risolverebbe il problema dell'OP? – ste