2017-01-24 4 views
0

Dies könnte trivial sein. Ich habe ein Modell, das einige entnommene Tensor X;Tensorflow mehrere Eingänge zu Grafik

X = tf.Tensor(...) 
yPred = model(X,...) 

Jetzt möchte ich einen anderen Tensor Z manchmal füttern;

Z = tf.placeholder(...) 
yPredZ = model(Z,...) 

Wie mache ich das, ohne den Subgraphen neu zu definieren?

Antwort

1

Der Fördermechanismus in TensorFlow ermöglicht es Ihnen, einen Wert für alle Tensor (nicht nur tf.placeholder() Tensoren) zu ernähren, solange sie in Form und Elementtyp entsprechen.

Deshalb, wenn x und z die gleiche Form haben, sollten Sie in der Lage sein, schreiben:

x = ... # Some dequeued `tf.Tensor`. 
yPred = model(x, ...) 

# ... 

sess.run(yPred, feed_dict={x: ...}) 

In einigen Fällen könnten Sie einen Tensor mit einer anderen Form zu x (in der Regel ein weniger füttern wollen bestimmte Form, z. B. mit einer anderen Chargengröße. In diesen Fällen können Sie tf.placeholder_with_default() verwenden, um einen Platzhalter, dessen Wert standardmäßig x zu erstellen, wenn Sie tun es nicht füttern:

x = ... # Some dequeued `tf.Tensor`. 

# For example, a shape of `None` means that the shape is completely unconstrained. 
# In practice, you will probably want to constrain at least the rank of the 
# placeholder to match the rank of `x`. 
x_placeholder = tf.placeholder_with_default(x, shape=None) 

yPred = model(x, ...) 

# ... 

sess.run(yPred, feed_dict={x_placeholder: ...}) 
+0

Nochmals vielen Dank. Was ist, wenn '' 'Z''' eigentlich ein anderer entkerbter Tensor ist? I.e. kein numpliges Array oder sowas. Kann ich das irgendwie füttern? – mattdns

+0

Momentan evaluiere ich '' 'Z.eval()' '', um es in ein np-Array zu konvertieren, bevor es wieder eingespeist wird. Es scheint etwas unordentlich zu sein. – mattdns

+0

Hmm, nicht leicht. Ich nehme an, dass Sie nicht in jedem Fall etwas in 'Z' aus der Warteschlange ziehen wollen, also würden Sie wahrscheinlich' tf.cond() 'verwenden wollen, setzen Sie die Dequeue-Operation in einen der Zweige und verwenden Sie ein' tf .bool' Platzhalter, um zu steuern, welcher Zweig der 'tf.cond()' verwendet wird. – mrry

Verwandte Themen