2015-12-18 19 views
12

TensorFlow è un buon modo per memorizzare i dati. Questo è per esempio usato per memorizzare i dati MNIST nell'esempio:TensorFlow crea set di dati da un array numpy

>>> mnist 
<tensorflow.examples.tutorials.mnist.input_data.read_data_sets.<locals>.DataSets object at 0x10f930630> 

Supponiamo di avere un'array di ingresso e di uscita numpy.

>>> x = np.random.normal(0,1, (100, 10)) 
>>> y = np.random.randint(0, 2, 100) 

Come posso trasformarli in un dataset tf?

voglio usare funzioni come next_batch

risposta

8

L'oggetto DataSet è solo una parte del tutorial MNIST, non la libreria tensorflow principale.

È possibile vedere dove si è definito qui:

GitHub Link

Il costruttore accetta un immagini ed etichette argomento quindi presumibilmente è possibile passare i propri valori lì.

+0

Ok grazie ho avuto questo sospetto. Penso che sarebbe uno strumento utile come parte della libreria principale. AFAIK qualsiasi operazione batch su array numpy richiede di eseguire una copia dei dati. Questo può portare ad un algoritmo più lento – Donbeo

+0

La filosofia è che TensorFlow dovrebbe essere solo una libreria matematica di base, ma altre librerie open source possono fornire ulteriori astrazioni utilizzate per l'apprendimento automatico. Simile a Theano che ha delle librerie come Pylearn2 costruite in cima. Se si desidera evitare le operazioni di copia, è possibile utilizzare la funzionalità di accesso ai dati basata sulla coda piuttosto che alimentare i segnaposto. –

+0

Vedo il punto. Molte grazie! – Donbeo

0

In alternativa, è possibile utilizzare la funzione tf.train.batch() per creare un batch di dati e allo stesso tempo eliminare l'utilizzo di tf.placeholder. Fare riferimento alla documentazione per ulteriori dettagli.

>>> images = tf.constant(X, dtype=tf.float32) # X is a np.array 
>>> labels = tf.constant(y, dtype=tf.int32) # y is a np.array 
>>> batch_images, batch_labels = tf.train.batch([images, labels], batch_size=32, capacity=300, enqueue_many=True)