2015-12-18 4 views
12

TensorFlow als Build es eine schöne Möglichkeit, Daten zu speichern. Dies wird beispielsweise verwendet, um die Daten MNIST im Beispiel zu speichern:TensorFlow erstellen Datensatz aus numpy Array

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

Angenommen, ein Eingangs- und Ausgangs numpy Arrays haben.

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

Wie kann ich sie in einen tf Datensatz umwandeln?

Ich mag Funktionen nutzen wie next_batch

Antwort

8

Das Dataset-Objekt ist nur ein Teil des MNIST Tutorial, nicht die Haupt TensorFlow Bibliothek.

Sie können sehen, wo es hier definiert ist:

GitHub Link

Der Konstruktor akzeptiert ein Bild und Etikett Argument so vermutlich Sie Ihre eigenen Werte dort passieren können.

+0

Ok danke, ich hatte diesen Verdächtigen. Ich denke, es wäre ein hilfreiches Werkzeug als Teil der Hauptbibliothek. AFAIK Bei jeder Stapeloperation in einem numply-Array muss eine Kopie der Daten ausgeführt werden. Dies kann zu einem langsameren Algorithmus führen – Donbeo

+0

Die Philosophie ist, dass TensorFlow nur eine Kern-Math-Bibliothek sein sollte, aber andere Open-Source-Bibliotheken können zusätzliche Abstraktionen bieten, die für maschinelles Lernen verwendet werden. Ähnlich wie Theano, auf dem Bibliotheken wie Pylearn2 aufgebaut sind. Wenn Sie Kopiervorgänge vermeiden möchten, können Sie die queuebasierte Datenzugriffsfunktion anstelle von Platzhaltern verwenden. –

+0

Ich sehe den Punkt. Danke vielmals! – Donbeo

0

Alternativ können Sie die Funktion tf.train.batch() verwenden, um eine Charge Ihrer Daten zu erstellen und gleichzeitig die Verwendung von tf.placeholder zu vermeiden. Weitere Informationen finden Sie in der Dokumentation.

>>> 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)