Antworten:
Der Protokollverlust hat die nette Eigenschaft, dass es sich um eine differenzierbare Funktion handelt. Die Genauigkeit ist möglicherweise wichtiger und definitiv interpretierbarer, kann jedoch aufgrund des Backpropagation-Algorithmus, bei dem die Verlustfunktion differenzierbar sein muss, nicht direkt für das Training des Netzwerks verwendet werden. Wenn Ihr bevorzugter Verlust nicht direkt optimierbar ist (wie die Genauigkeit), verwenden Sie eine Verlustfunktion, die sich ähnlich verhält wie der Proxy der wahren Metrik. Im Falle einer binären Klassifizierung würden Sie am Ende ein Sigmoid und einen Protokollverlust verwenden, um die Genauigkeit zu approximieren. Sie sind stark korreliert.
Ja, beide messen die Genauigkeit von y und y_hat und ja, sie sind normalerweise korreliert. Manchmal ist die Verlustfunktion möglicherweise nicht genau, aber Sie sind immer noch daran interessiert, die Genauigkeit zu messen, obwohl Sie sie nicht direkt optimieren. Das TensorFlow MNIST-Beispiel von Google minimiert / optimiert den Kreuzentropieverlust, zeigt dem Benutzer jedoch die Genauigkeit an, wenn Ergebnisse gemeldet werden. Dies ist völlig in Ordnung.
Manchmal möchten Sie die Genauigkeit nicht direkt optimieren. Wenn Sie beispielsweise ein schwerwiegendes Klassenungleichgewicht haben, maximiert Ihr Modell die Genauigkeit, indem Sie einfach immer die häufigste Klasse auswählen. Dies wäre jedoch kein nützliches Modell. In diesem Fall wäre Entropie / Log-Verlust eine bessere Verlustfunktion zur Optimierung.
show_accuracy
Parameter auf True gesetzt ist (wie bei der Anpassung oder bei der Auswertung). Ist das korrekt?
def your_own_metric(y_true, y_pred)
Funktion und übergebe sie anmodel.compile(..., metrics=[your_own_metric])