Ha llegado el momento de probar nuestro código con el dataset MNIST. Recordemos el código que lee el dataset:
import pandas as pd
mnist = pd.read_csv("mnist.csv", header = None)
y = mnist.pop(0)
X = mnist / 255
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 5000, random_state = 0)
Ahora no tenemos más que instanciar nuestra clase. Por ejemplo, con una capa oculta de 16 neuronas, una tasa de aprendizaje de 0.1, un tamaño del batch de 32 registros y 20 epochs:
model = NNClassifier(
sizes = [784, 16, 10],
learning_rate = 0.1,
batch_size = 32,
epochs = 20
)
Fijemos también una semilla para el generador de números aleatorios de NumPy:
import numpy as np
np.random.seed(0)
Entrenemos entonces nuestro algoritmo:
%%time
model.fit(x_train, y_train)
Epoch 0 complete
Epoch 1 complete
Epoch 2 complete
Epoch 3 complete
Epoch 4 complete
Epoch 5 complete
Epoch 6 complete
Epoch 7 complete
Epoch 8 complete
Epoch 9 complete
Epoch 10 complete
Epoch 11 complete
Epoch 12 complete
Epoch 13 complete
Epoch 14 complete
Epoch 15 complete
Epoch 16 complete
Epoch 17 complete
Epoch 18 complete
Epoch 19 complete
Wall time: 1min 22s
Veamos cuál es la predicción para nuestro bloque de pruebas:
prediction = model.predict(x_test)
prediction
array([3., 6., 6., ..., 7., 2., 5.])
...y la exactitud:
from sklearn.metrics import accuracy_score
accuracy_score(y_test, prediction)
0.9218
Para ser nuestro primer intento no está nada mal: hemos acertado un 93% de las imágenes del dataset.