Ich versuche, eine Lambda-Schicht zu erstellen, die einige deterministische Maskierung (ich spreche nicht über die Keras-Maskierungsschicht) vor dem Auspumpen der endgültigen Ausgabe durchführen wird. Das ist, was ich habe, so weit:Keras Custom Lambda Layer Tensor Manipulationsfehler
def binary_mask(x):
# Mask is half the size of x.
# 1 if pred1 > pred2 element-wise, 0 otherwise.
pred1, pred2 = tf.split(x, 2, 1)
mask = tf.greater(pred1, pred2)
mask = tf.to_float(mask)
return mask
def mask_output_shape(input_shape):
return (input_shape[0], units)
Und das ist, wie ich die Schicht mit der funktionalen API erstellen:
outputs = Lambda(binary_mask, output_shape=mask_output_shape)(inputs)
Ich bin einen sehr seltsamen Fehler von meinem Optimierer kommen zu bekommen. Es scheint, dass mein Farbverlauf None
ist.
Jedoch, wenn ich meinen aktuellen Code in binary_mask
mit einer der Beispiel Lambda
Schicht Implementierungen ersetzen, funktioniert es gut, z. return x
. Was mache ich hier falsch?
Ich bin ziemlich sicher, dass mein mask
in der Tat ein gültiger Tensorflow-Tensor ist.
Ich sehe was du sagst. Aber meine Zielausgabe ist ein Vektor von 0s und 1s. Warum sollte das immer noch ein Problem sein? – jjiang
Für Backpropagation zu arbeiten, sollte die Ausgabe auf jeder Ebene differenzierbar sein w.r.t. seine Eingabe. Wenn Sie eine "Idee" haben, die auf bestimmten Ebenen eine nicht differenzierbare Operation erfordert, können Sie versuchen, sie durch eine "weichere Version" für die Gradientenberechnung zu ersetzen. –