
Introductie
In deze blog laat ik stap voor stap zien hoe je een neuraal netwerk bouwt zodat we handgeschreven cijfers herkennen met deep learning. We gebruiken het bekende MNIST-dataset, Python en Keras (met TensorFlow). De focus ligt op het praktisch toepassen van deep learning in een paar regels code.
Wat je nodig hebt cijfers herkennen met deep learning
MNIST-dataset laden voor deep learning
We gebruiken een dataset van 70.000 afbeeldingen van handgeschreven cijfers (0–9).
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
MNIST staat voor Modified National Institute of Standards and Technology. Het is een dataset van grijswaardenafbeeldingen van handgeschreven cijfers van 0 t/m 9. Elke afbeelding bestaat uit 28 x 28 pixels.
De dataset is relatief goed gebalanceerd: de frequentie van elk cijfer ligt tussen de 5400 en 6700 afbeeldingen. De dataset is ook schoon waardoor en geen preprocessing nodig is.
Let wel op: MNIST is een ideale dataset voor benchmarks en om bekend te worden met het herkennen van handgeschreven cijfers. Echter, wanneer je gaat werken met datasets uit de praktijk (zoals factuurherkenning), dan zal je de nodige voorbewerking moeten uitvoeren.
Normaliseren van de data
We schalen pixelwaarden (0–255) naar 0–1 zodat het netwerk sneller leert.
x_train = x_train / 255.0
x_test = x_test / 255.0
Neuraal netwerk bouwen voor cijferherkenning
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense
model = Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation=’relu’),
Dense(10, activation=’softmax’)
])
Deep learning model compileren en trainen
We trainen het model op 60.000 voorbeelden in 5 rondes (epochs).
model.compile(optimizer=’adam’,
loss=’sparse_categorical_crossentropy’,
metrics=[‘accuracy’])
model.fit(x_train, y_train, epochs=5)
Het deep learning-model toepassen
We gaan ons zojuist getrainde model handmatig valideren door het eerste handgeschreven cijfer te gaan herkennen. Je kunt met matplotlib een willekeurige afbeelding laten zien:
import matplotlib.pyplot as plt
plt.imshow(x_test[0], cmap='gray')
plt.title(f"Modelvoorspelling: {model.predict(x_test[0].reshape(1,28,28)).argmax()}")
plt.show()
Resultaten van het deep learning-model evalueren
De handmatige controle is niet erg robuust: liever controleren we de gehele testset. Dit kan als volgt:
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f”Test accuracy: {test_acc:.2%}”)
De nauwkeurigheid ligt meestal rond de 97–98% met deze eenvoudige opzet.
Nauwkeurigheid (ofwel accuracy in het Engels) geeft aan hoe groot de kans is dat een willekeurige handgeschreven cijfer (uit de test set) correct wordt herkent.
Conclusie
Met een paar regels Python-code kun je een model trainen zodat we handgeschreven cijfers herkennen met deep learning. Dit is een klassieke maar krachtige oefening in deep learning — en een mooie basis voor complexere beeldherkenning.