2016-10-09 2 views
7

Ich bin ein Neuling für Tensorflow, und ich beginne mit dem offiziellen MNIST Beispielcode, um die Logik von Tensorflow zu lernen. Eine Sache, die ich nicht gut fand, ist, dass das MNIST-Beispiel den ursprünglichen Datensatz als komprimierte Dateien bereitstellt, deren Format für Anfänger nicht klar ist. Dieser Fall gehört auch zu Cifar10, das den Datensatz als Binärdatei bereitstellt. Ich denke, in der praktischen Deep-Learning-Aufgabe kann unser Datensatz viele Bilddateien enthalten, wie *.jpg oder *.png in einem Verzeichnis, und wir haben auch eine Textdatei, die das Etikett jeder Datei aufzeichnet (wie ImageNet-Datensatz). Lassen Sie mich MNIST als Beispiel verwenden.Laden von Bilddateien in ein Verzeichnis als Datensatz für das Training in Tensorflow

MNIST enthält 50k Trainingsbilder der Größe 28 x 28. Nehmen wir nun an, dass diese Bilder im jpg-Format vorliegen und in einem Verzeichnis ./dataset/ gespeichert sind. In ./dataset/ haben wir eine Textdatei label.txt das Etikett jeden Bildspeicher:

/path/to/dataset/ 
       image00001.jpg 
       image00002.jpg 
       ... ... ... ... 
       image50000.jpg 
       label.txt 

wo label.txt ist wie folgt:

#label.txt: 
image00001.jpg 1 
image00002.jpg 0 
image00003.jpg 4 
image00004.jpg 9 
... ... ... ... 
image50000.jpg 3 

Nun möchte Ich mag Tensorflow verwenden, um ein einzelnes Schichtmodell zu trainieren, mit diese Datenmenge. Könnte jemand helfen, ein einfaches Code-Snippet zu geben, um das zu tun?

Antwort

3

Es gibt grundsätzlich zwei Dinge, die Sie brauchen würden. Der erste ist normal Python-Code wie folgt:

import numpy as np 
from scipy import misC# feel free to use another image loader 

def create_batches(batch_size): 
    images = [] 
    for img in list_of_images: 
    images.append(misc.imread(img)) 
    images = np.asarray(images) 

    #do something similar for the labels 

    while (True): 
    for i in range(0,total,batch_size): 
     yield(images[i:i+batch_size],labels[i:i+batch_size]) 

Jetzt kommt der tensorflow Teil

imgs = tf.placeholder(tf.float32,shape=[None,height,width,colors]) 
lbls = tf.placeholder(tf.int32, shape=[None,label_dimension]) 

with tf.Session() as sess: 
#define rest of graph here 
# convolutions or linear layers and cost function etc. 


    batch_generator = create_batches(batch_size) 
    for i in range(number_of_epochs): 
    images, labels = batch_generator.next() 
    loss_value = sess.run([loss], feed_dict={imgs:images, lbls:labels}) 
Verwandte Themen