In ipython importierte ich tensorflow as tf
und numpy as np
und erstellte einen TensorFlow InteractiveSession
. Wenn ich laufe oder eine Normalverteilung mit numpy Eingang Initialisierung läuft alles in Ordnung:TensorFlow: Erzeugen einer zufälligen Konstante
some_test = tf.constant(np.random.normal(loc=0.0, scale=1.0, size=(2, 2)))
session.run(some_test)
Returns:
array([[-0.04152317, 0.19786302],
[-0.68232622, -0.23439092]])
Genau wie erwartet.
... aber wenn ich die Tensorflow Normalverteilungsfunktion verwenden:
some_test = tf.constant(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
session.run(some_test)
... es wirft eine Art Fehler sagen:
(...)
TypeError: List of Tensors when single Tensor expected
Was ich hier fehlt?
Der Ausgang:
sess.run(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
allein liefert genau dasselbe, die np.random.normal
erzeugt -> eine Matrix von Form (2, 2)
mit Werten aus einer Normalverteilung entnommen.
Danke für die Erklärung! Also muss ich "tf.Variable" verwenden, wenn ich die GPU-Beschleunigung aka "reinen" Tensorflow für eine zufällige "Konstante" bekommen möchte ?! – daniel451
Ja, es ist nicht intuitiv, nicht wahr? :) Das Problem ist, dass in TF die Konzepte "is variable" und "is initializable" im selben Typ kombiniert sind - wir haben gelegentlich bessere Möglichkeiten zur Initialisierung diskutiert (zB ein Äquivalent der statischen Initialisierung in C-). wie Sprachen), haben sich aber noch nicht für ein Design entschieden.(Man könnte sich vorstellen, dass so etwas für Optimierungen wie konstantes Falten usw. nützlich sein könnte) – mrry
Danke für die Antwort @mrry. Wenn ich versuche, das Gleiche zu tun, aber ich möchte 'some_test' danach nicht konstant halten, würde ich dasselbe tun wie Option 2, aber nicht 'sess.run (some_test.initializer)' einschließen? – bnorm