In ipython ho importato tensorflow as tf
e numpy as np
e creato un TensorFlow InteractiveSession
. Quando sto facendo funzionare o l'inizializzazione qualche distribuzione normale con ingresso NumPy, tutto funziona bene:TensorFlow: generazione di una costante casuale
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]])
proprio come previsto.
... ma quando uso la normale funzione di distribuzione tensorflow:
some_test = tf.constant(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
session.run(some_test)
... solleva un errore di tipo dicendo:
(...)
TypeError: List of Tensors when single Tensor expected
Che cosa mi manca qui?
L'uscita:
sess.run(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
solo restituisce la stessa cosa esatta che np.random.normal
genera -> una matrice di forma (2, 2)
con valori presi da una distribuzione normale.
Grazie per la spiegazione! Quindi devo usare 'tf.Variable 'quando voglio l'accelerazione della GPU o il" flusso "puro per ottenere una" costante "casuale ?! – daniel451
Sì, è controintuitivo, non è vero? :) Il problema è in realtà che, in TF, i concetti di "è variabile" e "è inizializzabile" sono combinati nello stesso tipo - abbiamo occasionalmente discusso modi migliori per fare l'inizializzazione (ad esempio alcuni equivalenti dell'inizializzazione statica in C- come le lingue), ma non si sono ancora risolti in un progetto.(Si potrebbe immaginare come una cosa del genere sarebbe utile per le ottimizzazioni come il piegamento costante, ecc.) – mrry
Grazie per la risposta @mrry. Se sto cercando di fare la stessa cosa ma non voglio mantenere la costante 'some_test', farei la stessa cosa dell'opzione 2 ma non includerò' sess.run (some_test.initializer) '? – bnorm