2016-08-08 12 views
1

Ich habe tensorflow wurde unter Verwendung eines Faltungs-neurale Netzwerk zu implementieren, Ich habe eine Anforderung, dass die die Ausgangswerte geringer ist als ein gegebener Wert MAX_VALTensorflow Klemmwerte außerhalb spezifischen Bereich

ich versuchte, eine Matrix zu schaffen gefüllt mit MAX_VAL und dann mit tf.select und tf.greater:

filled = tf.fill(output.get_shape(),MAX_VAL) 
modoutput = tf.select(tf.greater(output, filled), filled, output) 

Aber das funktioniert nicht weil die Form der Ausgabe nicht statisch bekannt ist: Es ist [?, 30] und tf.fill benötigt eine explizite Form.

Irgendeine Idee, wie ich das umsetze?

Antwort

2

Es gibt eine alternative Lösung, die tf.fill() wie Ihre ursprüngliche Version verwendet. Stattdessen Tensor.get_shape() die Verwendung die statische Form von output zu erhalten, verwenden Sie den tf.shape() Operator die dynamische Form von output zu erhalten, wenn der Schritt ausgeführt wird: (. Beachten Sie auch, dass die tf.clip_by_value() Betreiber könnten für Ihre Zwecke nützlich sein)

output = ... 
filled = tf.fill(tf.shape(output), MAX_VAL) 
modoutput = tf.select(tf.greater(output, filled), filled, output) 

0

Ich habe einen Weg gefunden, es zu tun.

Statt tf.fill der Verwendung verwendete ich tf.ones_like

filled = MAX_VAL*tf.ones_like(output) 
modoutput = tf.select(tf.greater(output, filled), filled, output) 

Bitte erwähnen Sie, wenn es eine schnellere oder bessere Weise ist dies möglich zu machen.