Проект MNIST в области компьютерного зрения включает в себя создание модели машинного обучения, которая может правильно идентифицировать рукописные цифры из набора данных из 60 000 обучающих изображений и 10 000 тестовых изображений.

Цель проекта MNIST — создать высокопроизводительную CNN, которая сможет точно классифицировать рукописные цифры. Этот проект стал эталонным набором данных для тестирования производительности алгоритмов машинного обучения и моделей глубокого обучения. Он также использовался для сравнения производительности различных архитектур нейронных сетей и методов оптимизации.

Набор данных MNIST широко используется в сообществе исследователей компьютерного зрения и привел ко многим достижениям в распознавании изображений и машинном обучении. Он также предоставил исследователям платформу для разработки новых алгоритмов и методов повышения точности и эффективности задач классификации изображений.

Начнем с импорта необходимых библиотек

from keras.datasets import mnist
import matplotlib.pyplot as plt

Continuamos dividiendo el contenido de el conjunto de datos Mnist, que se encuentra dentro de la libreria Keras, en Training Set y Test Set.

Tambien vemos que forma tienen, lo que resulta en imagenes de 28x28

(X_train,y_train),(X_test,y_test) = mnist.load_data()
print(f"We have {len(X_train)} images in the training set and {len(X_test)} in the Test Set")
X_train[0].shape

Vemos un primer vistazo a las imagesnes

plt.imshow(X_train[0])

Pasamos las imagenes a escala de grises. Esto lo hacemos para simplefical el procesamiento y reducir el tiempo del modelo, ademas de que la informacion que nos brindan las otras Dimensionsas puede resultar redundante para nuestro analisis.

plt.figure(figsize=(3, 3))
plt.imshow(X_train[0], cmap="gray")
plt.title(y_train[0])
plt.axis(False)

En este caso, primero reajustamos la imagen a 3x3 para que sea lo suficientemente grande como para Mostrar claramente la imagen del digito, pero no tan grande como para ocupar demasiado espacio en pantalla. Luego, en la segunda linea de codigo utilizamos el color map en escala de grises para mostrar la imagen en blanco y negro. Por ultimo, eliminamos los ejes x e y que tampoco nos son relayes actualmente

Luego, para no quedarnos con una sola imagen de nuestros datos, podemos emmplear la libreria Random.

import random
import matplotlib.pyplot as plt

random_image = random.randint(0, len(X_train))

plt.figure(figsize=(3,3))
plt.imshow(X_train[random_image], cmap="gray")
plt.title(y_train[random_image])
plt.axis(False)

Вам нужен утилитар Conv2D. Que se trata de una operacion matematica que se utiliza para el procesamiento de imagenes y en el deep learning. La convolucion en 2D se utiliza comunmente para extraer caracteristicas de las imagenes, como bordes, contornos y texturas mediante el uso de un conjunto de filtros o kernels y realizando un producto punto entre los valores de nuestro filtro y los valores de nuestra matriz, produciendo un уникальная доблесть в солиде.

La capa conv2D requiere que la entrada tenga la forma [height, width, color_channels], pero solamente contamos con height y width, por lo que que réformamos nuestra data de Train y Test

Procedemos con la normalizacion de datos,es decir que escalaremos los valores de entrada de los datos a un rango comun y predefinido, con el fin de mejorar el rendimiento y la estabilidad de la red neuronal.

#Data normalization
X_train = X_train / 225.
X_test = X_test / 255.
#Cambiamos de float64 a float32
X_train = X_train.astype(np.float32)
X_test = X_test.astype(np.float32)

Construimos nuestro modelo convolucional

Seguiremos la arquitectura TiniVGG, se trata de una version simplificada de la arquitectura VGG (Visual Geometry group) utilizada en tareas de reconocimiento de imagenes. TiniVGG имеет структуру, похожую на VGG, con capas convolucionales seguidas de capas de agrupamiento (объединение), pero utiliza menos capas y filtros de menor tamaño, utiliza solo 9 convolucionales y 3 capas totalmente conectadas, lo que la hase más eficiente en términos де uso де recursos computacionales.

Какова архитектурная функция?

cuenta con 7 этапы:

  1. процессамиенто
  2. Capaz convolucionales
  3. Объединение в пул (capaz de agrupamiento)
  4. capaz totalmente conectadas
  5. функция активации
  6. функция пердида
  7. оптимизация

# 2) CAPAZ CONVULUCIONALES

import tensorflow as tf
from tensorflow.keras import layers

model = tf.keras.Sequential([
 layers.Conv2D(filters=10,
    kernel_size=3, 
    activation="relu", 
    input_shape=(28,  28,  1)),
 layers.Conv2D(10,  3, activation="relu"),
 layers.MaxPool2D(),
 layers.Conv2D(10,  3, activation="relu"),
 layers.Conv2D(10,  3, activation="relu"),
 layers.MaxPool2D(),
 layers.Flatten(),
 layers.Dense(10, activation="softmax")
])

tf.keras.Sequential()является функцией TensorFlow, которая использует для создания модели последовательности красных нейронов. Le asignamos 10 filtros de 3x3 y una function de activacion ‘ReLU’, tambien especificamos el tamano de entrada de las imagenes de entrenamiento como (28,28,1)

Что это за красная нейронная последовательность?

Уна красная нейронная последовательность эс уна пила линейная де капа, donde ла Salida де уна капа эс ла entrada де ла siguiente капа. En уна красный нейрональный последовательный, ла информация fluye ан уна направление, десде ла капа де entrada través де уна о varias capas ocultas hasta ла капа де Salid. Son comúnmente utilizadas en aplicaciones de aprendizaje supervisado. Cada capa en la red neuronal secuencial состоит в соединении нейронов с дие procesan la información y la transferen a la siguiente capa. Cada neurona en una capa está conectada a todas las neuronas en la capa anterior y a todas las neuronas en la capa siguiente.

layers.Conv2D(10, 3, активация=”relu”)определяется последовательностью свертки с 10 фильтрами 3x3 и функцией активации ReLU.

layers.MaxPool2D()Se trata de una capa de agrupamiento que realiza un submuestro de la imagen utilizando la operacion maximo. Уменьшить количество изображений, сохранив важные характеристики

layers.Flatten()Создание апланарных карт объектов в одномерном векторе

layers.Dense(10, активация=”softmax”)Esta es la última capa de la red, que utiliza una capa densa (totalmente conectada) con 10 нейронов, Cada una Representando una Clase Diferente de la tarea де классификация. Функция активации Softmax используется для получения вероятностного распределения классов.

Vemos el резюме де нуэстро модели

model.summary()

Compilamos nuestro modelo,

model.compile(loss="sparse_categorical_crossentropy", 
   optimizer=tf.keras.optimizers.Adam(),
   metrics=["accuracy"])

Entrenamos Nuestro Modelo

model.fit(X_train, y_train, epochs=10)
model.evaluate(X_test, y_test)