Custom-Verlust-Funktion Keras Tensorflow
Brauche ich eine custom-weighted MSE-Verlust-Funktion. Ich definierte es in keras.backend
from keras import backend as K
def weighted_loss(y_true, y_pred):
return K.mean( K.square(y_pred - y_true) *
K.exp(-K.log(1.7) * (K.log(1. + K.exp((y_true - 3)/5 ))))
,axis=-1 )
Jedoch ein Testlauf gibt
weighted_loss(1,2)
ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("Exp_37:0", shape=(), dtype=float32)'
oder
weighted_loss(1.,2.)
ZeroDivisionError: integer division or modulo by zero
Frage ich mich, welche Fehler ich hier machen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ob Sie mit Tensorflow oder Theano ist irrelevant für deine Frage. Google die Bedeutung von 'tensor', wenn der Begriff verwirrt Sie.
Werfen Sie einen Blick auf, wie Keras eigene Verlust-Funktion tests wurden implementiert hier:
Kann man nicht einfach den feed eines float-oder int-in-tensor-Berechnungen. Beachten Sie auch, dass K. eval erhalten Sie das Ergebnis, die Sie suchen.
Also versuchen Sie etwas ähnliches mit Ihrer Funktion:
Gibt es auch keine Definition der benutzerdefinierten Funktion in keras.backend - was ist, wenn Sie sich entscheiden, zu aktualisieren, Keras später?
Stattdessen können Sie das folgende tun in Ihrem eigenen code: definieren Sie eine Funktion zurückgibt, die Ihren Verlust-Funktion
Dann, wenn Sie kompilieren möchten Sie Ihr Modell mit Ihrem Verlust der Funktion, die Sie tun können:
In Fall, dass Sie wollen, um zu definieren, ein allgemeiner Verlust der Funktion, wobei die Gewichtung abhängig von input, den Sie brauchen, um die wrap-Funktion. So zum Beispiel:
Dann, wenn Sie kompilieren möchten Sie Ihr Modell mit Ihrem Verlust der Funktion, die Sie tun können: