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
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"
Wenn "Kleid"
Es wird sortiert und gespeichert als.
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).
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."
Es gibt Dinge, die Menschen nicht verstehen, selbst wenn sie es sehen [^ 1]
So etwas wie eine Hose
Immerhin gibt es Dinge, die ich nicht verstehe ...
[^ 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