Wenn Sie wissen, welche Arten von Änderungen Sie vornehmen werden, können Sie diese Forminformationen einfach aus den Platzhaltern entfernen. Die Unsicherheit wird sich automatisch ausbreiten. Zum Beispiel:
import tensorflow as tf
placeholder = tf.placeholder(dtype=tf.float32, shape=[None])
derived = (placeholder/3)[1:, None]
print(placeholder.get_shape(), derived.get_shape())
Drucke:
(TensorShape([Dimension(None)]), TensorShape([Dimension(None), Dimension(1)]))
So wird es keine statische Form Informationen über die Länge der placeholder
gespeichert sein. Sie können sogar Tensoren mit unbekanntem Rang haben.
Das Rekonfigurieren von statischen Formen ist ein verlockender Gedanke, aber dies wird derzeit nicht unterstützt, da die Konstruktion von Graphen von statischen Forminformationen abhängen kann. Zum Beispiel:
placeholder = tf.placeholder(dtype=tf.float32, shape=[2])
if placeholder.get_shape()[0].value % 2 == 0:
derived = placeholder
else:
derived = tf.concat(0, [placeholder, [0]])
Dies wird nicht empfohlen Graph Konstruktionstechnik (viel besser zu nutzen tf.shape
mit cond
), aber es kommt vor. Diese Art von statisch-formbedingter Graphenstruktur wird leider nicht im Metagraphen erfasst.
Wird die Form propagiert, wenn ich 'sess.run (out, feed_dict = {...})' basierend auf den Eingaben aufruft? Wenn ja, dann ist das perfekt für mich. Kann Typ auf die gleiche Weise propagiert werden? Das Problem ist, dass ich nicht sicher sein kann, welche Form oder Art mein Feld vor der Hand sein wird, ohne viel Code zu schreiben. –
Ja, die "wahre" Form eines Tensors ist bei der Graphausführungszeit ('sess.run') bekannt und kann mit einem Teil des Graphen mit' tf.shape' berechnet werden (was einen ganzzahligen Tensor zurückgibt). Leider kenne ich für dtype nichts ähnliches. –