2017-02-07 3 views
2

Ich habe gelernt, dass ich TensorFlow programmieren kann, indem ich JSON modifiziere, die von Protobuf kommen. Siehe hereTensorFlow Form und Typ Inferenz

Wenn ich diesen JSON modifiziere, habe ich manchmal ein Problem, wo ich die JSON manuell bearbeiten muss, um die richtigen Formen der verschiedenen Eingaben und Ausgaben zu propagieren. Gibt es eine Möglichkeit, TF dies automatisch für mich tun, so dass ich Eingaben über Platzhalter angeben kann und dann die Formen und Typen automatisch propagiert werden?

Antwort

3

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.

+0

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

+0

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