Mit dem Aufkommen des tiefen Lernens ist es möglich geworden, KI-Aufgaben genauer als herkömmliches maschinelles Lernen auszuführen. Deep Learning befindet sich jedoch noch in der Entwicklungsphase, und es gibt keine etablierte Methode, um dies zu tun. Da es sich in der Forschungsphase befindet, sind viele Dinge kompliziert zu implementieren und zu steuern.
Dieses Mal werde ich eine einfache binäre Klassifizierung einführen, um die Implementierung so einfach wie möglich zu gestalten und das tiefe Lernen voranzutreiben.
├── data
└── exe.py
├── test
│ ├── 00_apple
│ └── 01_orange
└── train
├── 00_apple
└── 01_orange
Konfiguration des Umgebungsverzeichnisses Bereiten Sie ein Ausführungsmodul und ein Verzeichnis zum Speichern von Daten vor. Bereiten Sie im Datenverzeichnis einen Trainingsdatenzug und einen Testdatentest vor und speichern Sie Bilder von Äpfeln bzw. Orangen. Die Daten in jedem Verzeichnis sehen so aus.
Apfel
Orange
from keras.utils.np_utils import to_categorical
from keras.optimizers import Adagrad
from keras.optimizers import Adam
import numpy as np
from PIL import Image
import os
#Lesen Sie die Lehrerdaten
train_path="./data/train/"
test_path="./data/test/"
xsize=25
ysize=25
image_list = []
label_list = []
for dataset_name in os.listdir(train_path):
dataset_path = train_path + dataset_name
label = 0
if dataset_name == "00_apple":
label = 0
elif dataset_name == "01_orange":
label = 1
for file_name in sorted(os.listdir(dataset_path)):
label_list.append(label)
file_path = dataset_path + "/" + file_name
image = np.array(Image.open(file_path).resize((xsize, ysize)))
print(file_path)
#In der Reihenfolge von RGB konvertieren,[[Rotes Array],[Grünes Array],[Blaues Array]]
image = image.transpose(2, 0, 1)
#In ein eindimensionales Array konvertieren(25*25*3) Red,Green,Die Elemente von Blau sind in der richtigen Reihenfolge angeordnet.
image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0]
#Konvertieren Sie in den Bereich 0 bis 1
image_list.append(image / 255.)
#numpy Umwandlung.
X = np.array(image_list)
# label=0 -> [1,0], label=1 -> [0,1]Umstellung auf
Y = to_categorical(label_list)
#Modelldefinition
model = Sequential()
model.add(Dense(200, input_dim=xsize*ysize*3))
model.add(Activation("relu"))
model.add(Dropout(0.2))
model.add(Dense(200))
model.add(Activation("relu"))
model.add(Dropout(0.2))
model.add(Dense(2))
model.add(Activation("softmax"))
model.compile(loss="categorical_crossentropy", optimizer=Adam(lr=0.001), metrics=["accuracy"])
model.summary()
#Lernen
model.fit(X, Y, nb_epoch=1000, batch_size=100, validation_split=0.1)
CNN wird häufig bei der Klassifizierung von Bildern verwendet, der Einfachheit halber wurde diesmal jedoch nur die vollständige Kombination verwendet. Wenn Sie Formmerkmale aus einem Bild extrahieren, wird es häufig grau skaliert, sodass keine unnötigen Informationen enthalten sind. Es wird jedoch beurteilt, dass Farbinformationen wichtig sind, da es sich um eine Klassifizierung von Äpfeln und Orangen handelt. Alle RGB-Informationen werden jedoch ohne Graustufen an den Eingang des neuronalen Netzes übergeben.
#Inferenz
total = 0.
ok_count = 0.
for testset_name in os.listdir(test_path):
testset_path = test_path + testset_name
label = -1
if testset_name == "00_apple":
label = 0
elif testset_name == "01_orange":
label = 1
else:
print("error : label not exist")
exit()
for file_name in os.listdir(testset_path):
label_list.append(label)
file_path = testset_path + "/" + file_name
image = np.array(Image.open(file_path).resize((25, 25)))
print(file_path)
image = image.transpose(2, 0, 1)
image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0]
result = model.predict_classes(np.array([image / 255.]))
print("label:", label, "result:", result[0])
total += 1.
if label == result[0]:
ok_count += 1
print("accuracy: ", ok_count / total * 100, "%")
accuracy: 100.0 %
Obwohl Deep Learning sehr genau ist, beträgt die Genauigkeitsrate nicht ganz 100%. Diesmal war es jedoch eine einfache Klassifizierung von Äpfeln und Orangen, sodass die richtige Antwortrate 100% betrug.
Recommended Posts