2017-07-22 1 views
0

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.

Antwort

0

Ich fürchte, ich verstehe nicht ganz den Zweck der Umwandlung inputs in einen Vektor von 0s und 1s, aber diese Operation ist eindeutig nicht differenzierbar. Aus diesem Grund wird kein Farbverlauf zurückgegeben (d. H. Der Farbverlauf ist None).

Vielleicht können Sie eine "weichere" Version für diese Funktion versuchen. Zum Beispiel kann sigmoid(a - b) eine weichere Version von 1 if a > b else 0 sein.

outputs = Lambda(lambda x: K.sigmoid(x[0] - x[1]))([pred1, pred2]) 
+0

Ich sehe was du sagst. Aber meine Zielausgabe ist ein Vektor von 0s und 1s. Warum sollte das immer noch ein Problem sein? – jjiang

+0

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. –

Verwandte Themen