TensorFlow des tf.placeholder()
Tensoren benötigen Sie keine Form geben, um Sie zu Feed Tensoren verschiedener Formen in einem späteren tf.Session.run()
Anruf zu ermöglichen. Standardmäßig hat ein Platzhalter eine vollständig unbeschränkte Form, Sie können ihn jedoch einschränken, indem Sie das optionale Argument shape
übergeben. Beispiel:
w = tf.placeholder(tf.float32) # Unconstrained shape
x = tf.placeholder(tf.float32, shape=[None, None]) # Matrix of unconstrained size
y = tf.placeholder(tf.float32, shape=[None, 32]) # Matrix with 32 columns
z = tf.placeholder(tf.float32, shape=[128, 32]) # 128x32-element matrix
Wenn Sie einen Platzhalter erstellen, reserviert TensorFlow keinen Speicher. Wenn Sie stattdessen den Platzhalter füttern, wird TensorFlow in dem Aufruf an tf.Session.run()
entsprechend Speicher für die Eingabe (und anschließend für alle erforderliche Zwischen-Tensoren) reservieren.
Beachten Sie, dass tf.Variable
Objekte normalerweise eine Form erfordern, wenn Sie sie erstellen, und diese Form wird vom ersten Argument des Initialisierers abgeleitet. In Ihrem Programm gibt rng.randn()
(ein Alias für numpy.random.randn()
) einen Skalarwert zurück, und so haben die Variablen W
und b
skalare Form.
Obwohl die Platzhalter in Ihrem Code (X
und Y
) haben unbeschränkte Form, einige der Operatoren wie tf.add()
und tf.mul()
, müssen zusätzliche Anforderungen über die Form ihrer Argumente (viz., Dass sie kompatibel mit den NumPy broadcasting rules) . Da TensorFlow beim Erstellen des Diagramms nicht weiß, wie die tatsächlichen Formen dieser Tensoren aussehen, vertraut es darauf, dass der Benutzer weiß, was er tut, und führt die Überprüfung dynamisch aus (während des Aufrufs an tf.Session.run()
). Wenn Sie stattdessen die Formen der Platzhalter einschränken, aktivieren Sie TensorFlow, um einige Prüfungen früher durchzuführen, und dies kann dazu beitragen, Fehler zu reduzieren.
Danke! Wie wäre es mit dem variablen Fall? – Edamame
Habe gerade gesehen, dass du auch danach gefragt hast ... Ich habe die Antwort aktualisiert, um es zu erklären. – mrry
wie ich den Code in https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/2_BasicModels/linear_regression.ipynb gelesen habe Es scheint mir, dass die Variable W ein Array ist, kein Skalar. Verstehe ich das falsch? Vielen Dank! – Edamame