Personligt projekt
Juli 2021
Keras Deep-Learning
Vision baseret maskinelæring som kan læse håndskrevne tal
Jeg har udforsket en del i maskine læring, og har lavet min egen maskine lærings model. Jeg brugte keras som er googles deep learning API til at lave en model som kan klassificere håndskrevne numre. Projektet er lavet i vs code og skrevet i python. Daten er importen fra keras.datasets.mnist og har over 10'000 billeder til at træne en model med.
01
Preprocessing
Først skal billederne hentes fra serveren. Billederne er sort/hvis på en scala fra 0-255 og hver pixel i billedet er udskiftet med et tal.
import keras
import keras.datasets.mnist
import keras.layers
data = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = data.load_data()
train_images = train_images/255.0
train_images = train_images/255.0
02
Create & compile model
Jeg brugte keras. Sequential til at lave en model med 3 lag. Første lag er til inputs. der er 784 inputs (28*28). Det midterste lag (hidden layer) har 128 neuroner. Det sidste lag har 10 output neuroner. fra 0 til 9.
model = keras.Sequential([
# input layer 784/28*28 neurons
keras.layers.Flatten(input_shape=(28, 28)),
# hidden layer 128 neurons
keras.layers.Dense(128, activation=“relu”),
# output layer 10 neurons
keras.layers.Dense(10, activation=“softmax”) ])
# configures the model for training
model.compile(optimizer=“Adam", loss=“sparse_categorical_crossentropy”, metrics=[“accuracy”])
03
Train the model
Modellen skal nu tilpasse sig dataen. Flere tusinde billeder bliver vist til modellen sammen med resultatetat billedets Verdi. Det er også 15 epochs, hvilket vil sige at den ser alting 15 gange I tilfældig rækkefølge.
# train model
model.fit(train_images, train_labels, epochs=15)
# evaluate model
test_loss, test_acc = model.evaluate(test_images, test_labels)
# save model
model.save(“digit_classifier.h5”)
04
Use the model
Nu hvor modellen er gemt som en fil, er det nemt importere den I en ny fil, og bruge den til til at klassificere nye tal. Først importer jeg et billede af et tal. Billedet skal derefter gøres sort/hvis og eskaleres ned til en størrelse på 28 * 28 pixels. Jeg importere modellen som tidligere blev gemt og bruger den til at klassificere det nye billede.
import cv2
file = r"image.png"
image = cv2.imread(file, cv2.IMREAD_GRAYSCALE)
img_resized = cv2.resize(image, (28, 28), interpolation=cv2.INTER_LINEAR)
img_resized = cv2.bitwise_not(img_resized)
model_digit = keras.models.load_model("digit_classifier.h5")
predection = model.predict(img_resized)
print(class_names[predection])