1

Ich versuche, benutzerdefinierte metrische Funktion zu schreiben, in dem Kompilierung Schritt zu setzen, schrieb auf diese Weise:Erstellen Sie eigene Metrik für Verlustfunktion mit Keras, mit Fehlern

self.model.compile(optimizer=sgd,loss='categorical_crossentropy',metrics=[self.dice_similarity_coefficient_metric,self.positive_predictive_value_metric,self.sensitivity_metric]) 

Ich schrieb Dice Ähnlichkeit Coefficient, positiver prädiktiver Wert und Ähnlichkeit auf diese Weise:

  • FP = falsch positive
  • TP = true positive
  • FN = falsch negative

def dice_similarity_coefficient_metric(self, y_true, y_pred): 
     y_true = np.array(K.eval(y_true)) 
     y_pred = np.array(K.eval(y_pred)) 
     FP = np.sum(y_pred & np.logical_not(y_true)).astype(float) 
     TP = np.sum(y_true & y_pred).astype(float) 
     FN = np.sum(np.logical_not(y_pred) & 
     np.logical_not(y_true)).astype(float) 
     return K.variable(np.array((2 * TP)/(FP + (2 * TP) + FN + 
     K.epsilon()))) 

def positive_predictive_value_metric(self, y_true, y_pred): 
     y_true = np.array(K.eval(y_true)) 
     y_pred = np.array(K.eval(y_pred)) 
     FP = np.sum(y_pred & np.logical_not(y_true)).astype(float) 
     TP = np.sum(y_true & y_pred).astype(float) 
     return K.variable(np.array(TP/(FP + TP + K.epsilon()))) 

def sensitivity_metric(self, y_true, y_pred): 
     y_true = np.array(K.eval(y_true)) 
     y_pred = np.array(K.eval(y_pred)) 
     TP = np.sum(y_true & y_pred).astype(float) 
     FN = np.sum(np.logical_not(y_pred) & 
     np.logical_not(y_true)).astype(float) 
     return K.variable(np.array(TP/(TP + FN + K.epsilon()))) 

, wenn ich den Code i den folgenden Fehler haben laufen:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_3_target' with dtype float [[Node: dense_3_target = Placeholderdtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]]

jemand Pflege kann zu erklären, wo das Problem ist, ? Wo liege ich falsch?

Danke

Antwort

0

Wahrscheinlich ist es besser, Metriken Funktionen Backend zu definieren. Zum Beispiel:

y_true = np.array([[1.0, 1.0, 0.0, 1.0], [1.0, 1.0, 0.0, 1.0], [1.0, 1.0, 0.0, 1.0]], dtype=np.float32) 
y_pred = np.array([[0.3, 0.99, 0.99, 0.1], [0.6, 0.99, 0.99, 0.1], [0.1, 0.99, 0.99, 0.1]], dtype=np.float32) 
n_fn = np.sum((y_true - y_pred) > 0.5) 
Y_true = K.placeholder((None, 4), dtype=K.floatx()) 
Y_pred = K.placeholder((None, 4), dtype=K.floatx()) 
n_fn = false_negatives(Y_true, Y_pred).eval(inputs_to_values={Y_true: y_true, Y_pred: y_pred}) 

HTH

:

def false_negatives(Y_true, Y_pred): 
    return K.sum(K.round(K.clip(Y_true - Y_pred, 0, 1))) 

Es kann auf einem Beispiel Daten mit 5 FN überprüft werden

Verwandte Themen