[PYTHON] Sortieren Sie Fashion-MNIST-Daten und speichern Sie sie als PNG-Datei

Einführung

Machst du maschinelles Lernen? > Begrüßung

Früher habe ich Chainer verwendet, aber aus irgendeinem Grund habe ich mich für PyTorch oder Keras entschieden. Das Tutorial für maschinelles Lernen ist also der MNIST-Datensatz handgeschriebener Zahlen, aber das Tutorial von TensorFlow verwendet die Daten von Fashion-MNIST mit einer leichten Wendung. Ich bin.

Dieses Tutorial ist sehr einfach, aber im Moment ist es hilfreich, einen kurzen Blick auf die Daten zu werfen, die Sie trainieren. Laden wir also Fashion-MNIST herunter und sortieren Sie die Daten, die für das Problem der Kleidungsklassifizierung verwendet wurden.

Ich werde den Code unten setzen.

https://github.com/kaityo256/fashion_mnist_dump

Wie benutzt man

Lass es einfach laufen. Ich denke, Sie benötigen TensorFlow Version 2 oder höher.

python fashion_mnist_dump.py 

Bei der Ausführung werden die folgenden Verzeichnisse ausgegraben und die Daten mit den entsprechenden Beschriftungen in Seriennummern gespeichert.

test
├ Bag
├ Boot
├ Coat
├ Dress
├ Pullover
├ Sandal
├ Shirt
├ Sneaker
├ Top
└ Trouser

train
├ Bag
├ Boot
├ Coat
├ Dress
├ Pullover
├ Sandal
├ Shirt
├ Sneaker
├ Top
└ Trouser

Es gibt 10 Arten von Etiketten. Die Testdaten betragen 1000 Blatt für jedes Etikett, insgesamt 10.000 Blatt, und die Trainingsdaten sind 6000 Blatt, insgesamt 60.000 Blatt, für insgesamt 70.000 Blatt.

Zum Beispiel die Testdaten "Sandale"

sandals.png

Wenn "Kleid"

dresses.png

Es wird sortiert und gespeichert als.

Skript

Das Skript ist auch kurz, also werde ich alles posten.

import os

import IPython
from PIL import Image
import numpy as np
import tensorflow as tf
from tensorflow import keras

fashion_mnist = keras.datasets.fashion_mnist
train, test = fashion_mnist.load_data()

dirnames = ['Top', 'Trouser', 'Pullover', 'Dress',
            'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Boot']


def save_img(filename, data):
    img = Image.new("L", (28, 28))
    pix = img.load()
    for i in range(28):
        for j in range(28):
            pix[i, j] = int(data[j][i])
    img2 = img.resize((28*5, 28*5))
    img2.save(filename)


def dump(data, dhead):
    for i in range(10):
        dname = "{}/{}".format(dhead, dirnames[i])
        if os.path.isdir(dname) is False:
            os.makedirs(dname)
    images, labels = data
    count = [0]*10
    for i in range(len(images)):
        index = labels[i]
        filename = "{}/{}/{}.png ".format(dhead, dirnames[index], count[index])
        save_img(filename, images[i])
        count[index] += 1
        print(filename)


dump(test, "test")
dump(train, "train")

Ich denke nicht, dass es besonders schwierig ist, aber ich werde es kurz erklären.

Laden Sie zunächst die Daten herunter.

fashion_mnist = keras.datasets.fashion_mnist
train, test = fashion_mnist.load_data()

fashion_mnist.load_data () gibt die Trainings- und Testdatensätze zurück.

Jeder Datensatz besteht aus Bilddaten und Etikettendaten. Jedes ist ein NumPy-Array.

Damit

train_images, train_labels = train

Und so weiter können Sie das Bild und die Beschriftung erhalten.

Das Bild ist ein NumPy-Array mit Testdaten von 10000 x 28 x 28 und Trainingsdaten von 60000 x 28 x 28. Da der Typ "uint8" ist, dh eine Ganzzahl von 0 bis 255, können Sie ihn als Bild speichern, indem Sie die Graustufenhelligkeit unverändert verwenden. Die folgende Funktion macht das.

def save_img(filename, data):
    img = Image.new("L", (28, 28))
    pix = img.load()
    for i in range(28):
        for j in range(28):
            pix[i, j] = int(data[j][i])
    img2 = img.resize((28*5, 28*5))
    img2.save(filename)

Erstellen Sie mit "Image.new (" L ", (28, 28))" ein 28 x 28 Pixel großes Graustufenbild und erhalten Sie die Pixeldaten mit "img.load ()". Jetzt müssen Sie nur noch ein NumPy-Array in diese Daten einfügen (Sie müssen es in "int" umwandeln).

Da es so klein ist, wird es fünfmal vergrößert und mit "img.resize ((28 * 5, 28 * 5))" gespeichert.

Die Funktion dump (data, dhead) wird aufgerufen, indem der Dateiname und die Daten in dieses save_img eingefügt werden.

"Daten" sind Test- oder Trainingsdaten, und "dhead" ist Test oder Training, und sie werden durch den Verzeichnisnamen unterschieden.

Es ist nicht besonders schwierig, aber wenn Sie es zum Lernen verwenden, ist es bequemer, diese Daten in reale Daten von -1,0 bis 1,0 zu konvertieren und sie auf 784 eindimensionale Daten anstatt auf 28x28 zweidimensionale Daten zu reduzieren. Gut (CNN ist möglicherweise besser, um in zwei Dimensionen zu bleiben).

Zusammenfassung

Ich habe TensorFlow / Keras verwendet, um Fashion-MNIST-Daten abzurufen, zu sortieren und als Datei zu speichern. Es ist interessant, einen kurzen Blick auf die Daten zu werfen. Zum Beispiel

Ich dachte: "Oh, es ist Gap." 83.png

Es gibt Dinge, die Menschen nicht verstehen, selbst wenn sie es sehen [^ 1] 804.png

So etwas wie eine Hose 10.png

Immerhin gibt es Dinge, die ich nicht verstehe ... 20.png

[^ 1]: Die richtige Antwort (Etikett) ist eine Tasche.

Wie auch immer, Bibliotheken für maschinelles Lernen entwickeln sich schnell und es ist schwer aufzuholen ...

Recommended Posts

Sortieren Sie Fashion-MNIST-Daten und speichern Sie sie als PNG-Datei
Graustufenbild und als CSV speichern
Datenverarbeitung 1 Datenformatierung und Dateieingabe / -ausgabe
So tarnen Sie eine ZIP-Datei als PNG-Datei
Beschneiden Sie Numpy.ndarray und speichern Sie es als Bild
Daten auf jupyter verschlüsseln und speichern und bei Bedarf entschlüsseln
Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion
Erstellen Sie einen Docker-Container und speichern Sie PNG vor Altair