[PYTHON] Vorbereiten des Ladens des Originaldatensatzes

Wenn Sie Deep Learning durchführen, möchten Sie in Kürze nicht nur den Beispieldatensatz, sondern auch Ihren eigenen Datensatz laden. Ich kann Bilder sammeln, aber was soll ich danach tun? Also habe ich eine Notiz nach dem Verfahren hinterlassen, die leicht zu verstehen scheint.

Lesen Sie die Datei

Verwenden Sie die TensorFlow-Funktionen, um die Datei zu lesen. Wählen Sie "tf.read_file ()".

Die Verwendung ist wie folgt.

image_r = tf.read_file(fname)

fname ist der Name der Datei, die Sie lesen möchten. Wenn Japanisch enthalten ist, tritt ein Fehler auf, es sei denn, es handelt sich um UTF-8. (Möglicherweise kann der Zeichencode geändert werden ^^;)

Bild laden

Verwenden Sie die TensorFlow-Funktionen, um das Bild zu laden. Derzeit werden PNG und JPEG unterstützt.

Darüber hinaus gibt es eine praktische Funktion, mit der jeder der beiden oben genannten Typen gelesen werden kann.

Ich kann jedoch weder BMP noch TIF lesen.

Die Verwendung ist wie folgt.

image_r = tf.read_file(fname)
image = tf.image.decode_image(image_r, channels=3)

Der Ablauf besteht darin, zuerst die Datei zu lesen und sie entsprechend dem Format zu dekodieren. Das Leseergebnis ist ein Array von (vertikal, horizontal, Kanal). Insbesondere im Fall eines 2x2xRGB-Bildes [[[R, G, B] # (x, y) = (0,0) oben links [R, G, B]] # (x, y) = (1,0) Oben rechts [[R, G, B] # (x, y) = (0,1) Unten links [R, G, B]]] # (x, y) = (1,1) Unten rechts Es wird in der Reihenfolge von sein.

[Beiseite] Eigentlich kann GIF auch gelesen werden, aber es scheint, dass das Ergebnis nach der Decodierung für (Frame, Vertikal, Horizontal, Kanal) und animiertes GIF ist. Ich werde Ihnen sagen, dass ich GIF nicht lesen kann, da sich die Daten geringfügig von den anderen unterscheiden (Explosion)

Geben Sie die zu lesende Datei an

Wenn Sie das Dataset tatsächlich lesen, crawlen Sie wahrscheinlich das Verzeichnis oder lesen die Definitionsdatei. Beschreiben Sie vorerst das Verfahren zum Lesen der Definitionsdatei.

Es wird davon ausgegangen, dass die Definitionsdatei als Textdatei (z. B. CSV) beschrieben wird. Zum Beispiel so.

c:\work\image\image1.png
c:\work\image\image2.png
c:\work\image\image3.png

Da es sich um Deep Learning handelt, ist es so, wenn Sie eine Etikettennummer hinzufügen.

c:\work\image0\image1.png, 0
c:\work\image0\image2.png, 0
c:\work\image1\image3.png, 1

Um diese CSV zu lesen, verwenden wir auch die TensorFlow-Funktion. (Alles ist bequem und bequem!)

Bereiten Sie zunächst eine Warteschlange vor, um sie zeilenweise abzurufen. Diese Funktion ist "tf.train.string_input_producer ()". Als nächstes wird eine Klasse mit dem Namen "tf.TextLineReader" vorbereitet, um die Textdatei zeilenweise zu lesen, und durch Angabe der Warteschlange früher in dieser Funktion "read ()" werden die Daten für eine Zeile tatsächlich vorbereitet. Wird gelesen. Danach wird es gemäß dem CSV-Format analysiert und diesmal in Dateinamen und Beschriftungen zerlegt.

Der Code sieht so aus.

fname_queue = tf.train.string_input_producer([csvfile])
reader = tf.TextLineReader()
key, val = reader.read(fname_queue)
fname, label = tf.decode_csv(val, [["aa"], [1]])

csvfile ist der zu lesende CSV-Dateiname, key ist der CSV-Dateiname und die Zeilennummer, val ist die Zeichenfolge dieser Zeile, fname ist die erste Spalte (Dateiname) und label ist die zweite Spalte (Label-Nummer). .. Bilddaten werden mit diesem fnamen gelesen.

Es ist schwer, die Warteschlange zu verstehen, aber wenn Sie sich vorstellen können, die CSV jedes Mal Zeile für Zeile zu lesen, anstatt die CSV sofort zu lesen, habe ich das Gefühl, dass ich sie irgendwie verstehen kann. (Es scheint, dass der Zugriff auf den Schlüssel oder Wert beim Lesen der nächsten Zeile hochgezählt wird.)

Dank dieser CSV ist es also möglich, mit jeder Struktur umzugehen, in der die Bilddatei gespeichert ist. Das Erstellen dieser CSV-Datei ist jedoch mühsam. Daher möchte ich Code schreiben, um das Verzeichnis zu crawlen und CSV zu erstellen.

Lauf

Tatsächlich liest der Code die Datei bisher nicht. Der Punkt von TensorFlow ist, dass das Diagramm zuerst erstellt und dann ausgeführt wird. Mit anderen Worten, auch diesmal war der Teil bis jetzt der Graphkonstruktionsteil, und der Ausführungsteil wurde nicht geschrieben.

Daher ist der folgende Code erforderlich, um es tatsächlich auszuführen.

sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
tf.train.start_queue_runners(sess)
x = sess.run(image)

Erstellen Sie eine Sitzung, initialisieren Sie sie, starten Sie eine Warteschlange und führen Sie sie aus. Bitte beachten Sie, dass sich die Warteschlange nicht verschiebt und keine Dateien gelesen werden, wenn Sie dieses "tf.train.start_queue_runners ()" vergessen. (Es bewegt sich nicht nur nicht, sondern friert auch ein und kann nicht gestoppt werden ...) Das Endergebnis x sind die gelesenen Bilddaten (für alle Dateien).

Bonus

Hier ist der Code, den ich tatsächlich alle zusammen ausprobiert habe.

import sys
import tensorflow as tf

def read_csv(csvfile):
    fname_queue = tf.train.string_input_producer([csvfile])
    reader = tf.TextLineReader()
    key, val = reader.read(fname_queue)
    fname, label = tf.decode_csv(val, [["aa"], [1]])
    return read_img(fname)

def read_img(fname):
    img_r = tf.read_file(fname)
    return tf.image.decode_image(img_r, channels=3)

def main():
    argv = sys.argv
    argc = len(argv)
    if (argc < 2):
        print('Usage: python %s csvfile' %argv[0])
        quit()

    image = read_csv(argv[1])

    sess = tf.Session()
    init = tf.initialize_all_variables()
    sess.run(init)
    tf.train.start_queue_runners(sess)
    x = sess.run(image)

    print(x)

if __name__ == '__main__':
    main()

Der CSV-Dateiname wird als Argument übergeben.

Bonus (2)

Um mit Deep Learning arbeiten zu können, ist es schwierig, alle Dateien in CSV zu schreiben. Daher denke ich, dass es notwendig ist, sie so zu ändern, dass sie alle paar Dateien abgerufen werden. Es ist auch ein Problem, wenn sie in der in der CSV-Datei angegebenen Reihenfolge angezeigt werden. Daher muss ein Mechanismus zum Mischen hinzugefügt werden. (Es scheint in tf.train.string_input_producer () zu sein) Außerdem möchte ich das aufgenommene Bild aufblasen, drehen oder verschieben oder eine Verarbeitung durchführen, um die Anzahl der Bilder zu erhöhen.

Ich möchte diesen Bereich als nächstes untersuchen.

Recommended Posts

Vorbereiten des Ladens des Originaldatensatzes
Lesen des SNLI-Datensatzes
Laden Sie den VGG Face2-Datensatz direkt auf den Server herunter
Setzen Sie die Anzahl der Hot-codierten Features auf den ursprünglichen Kategoriewert zurück
Fügen Sie den ursprünglichen Kontextprozessor hinzu
Der Weg nach Pythonista
Der Weg nach Djangoist
Ich möchte R-Datensatz mit Python verwenden
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Übergeben Sie die OpenCV-Daten der ursprünglichen C ++ - Bibliothek an Python
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Verwendung des Generators
Punkt entsprechend dem Bild
Der Weg zum Herunterladen von Matplotlib
Wie benutzt man den Dekorateur?
So erhöhen Sie die Achse
So starten Sie die erste Projektion
Extrahieren Sie den Index der ursprünglichen Mengenliste, der der Liste der Teilmengen entspricht.
Ich habe versucht, den Getränkepräferenzdatensatz durch Tensorzerlegung zu visualisieren.