2017-02-17 2 views
3

Ich möchte ein Eingabebild img (das auch negative Werte hat) nehmen und es in zwei Aktivierungsschichten einspeisen. Ich möchte jedoch eine einfache Transformation vornehmen, z. multiplizieren Sie das ganze Bild mit -1.0:TypeError: Ausgabe Tensoren zu einem Modell müssen Keras Tensoren sein

left = Activation('relu')(img) 
right = Activation('relu')(tf.mul(img, -1.0)) 

Wenn ich es auf diese Weise tun erhalte ich:

TypeError: Output tensors to a Model must be Keras tensors. Found: Tensor("add_1:0", shape=(?, 5, 1, 3), dtype=float32) 

und ich bin nicht sicher, wie ich das beheben kann. Gibt es eine Keras Seite mul() Methode, die ich für so etwas verwenden kann? Oder kann ich das Ergebnis von tf.mul(img, -1.0) irgendwie so einpacken, dass ich es an Activation weitergeben kann?

Hinweis: Die negativen Werte können wichtig sein. So transformiert man das Bild z.B. das Minimum ist einfach 0.0 ist hier keine Lösung.


Ich bin immer der gleiche Fehler für

left = Activation('relu')(conv) 
right = Activation('relu')(-conv) 

Der gleiche Fehler für:

import tensorflow as tf 

minus_one = tf.constant([-1.]) 

# ... 

    right = merge([conv, minus_one], mode='mul') 

Antwort

4

Hat eine Lambda-Layer Erstellen Ihrer Funktion arbeiten zu wickeln?

See doc here

from keras.layers import Lambda 
import tensorflow as tf 

def mul_minus_one(x): 
    return tf.mul(x,-1.0) 
def mul_minus_one_output_shape(input_shape): 
    return input_shape 

myCustomLayer = Lambda(mul_minus_one, output_shape=mul_minus_one_output_shape) 
right = myCustomLayer(img) 
right = Activation('relu')(right) 
+0

Ja, das funktioniert! Vielen Dank! – displayname

+0

Gern geschehen :) –

Verwandte Themen