Распознавание цифр с использованием набора данных MNIST с использованием функции активации Softmax и ReLu
MNIST: модифицированная база данных Национального института стандартов и технологий. База данных MNIST представляет собой набор данных из 60 000 маленьких квадратных оттенков серого с размером 28x28 с изображением рукописных цифр от 0 до 9, наш девиз - классифицировать ввод цифр в блокноте для рисования интерфейса Gradio.
- MNIST широко используется для классификации цифр, и точность варьируется от 99% ± 0,2–0,4%, ниже приведен пример, показывающий график для набора данных MNIST.
- Это показывает, что изображения, используемые в тренировочном наборе, размером 28x28 пикселей сведены в одномерный вектор размером 784 пикселя. Каждый из 784 пикселей, составляющих изображение, хранится как значение от 0 до 255.
- Это определяет оттенки серого пикселя, так как наши изображения представлены только в черно-белом цвете. Таким образом, черный пиксель представлен 255, а белый пиксель — 0, с различными оттенками серого где-то посередине.
ПРИМЕР ДЛЯ ГРАФИКА НАБОРА ДАННЫХ MNIST
from keras.datasets import mnist from matplotlib import pyplot # load dataset (trainX, trainy), (testX, testy) = mnist.load_data() # summarize loaded dataset print('Train: X=%s, y=%s' % (trainX.shape, trainy.shape)) print('Test: X=%s, y=%s' % (testX.shape, testy.shape)) # plot first few images for i in range(9): # define subplot pyplot.subplot(330 + 1 + i) # plot raw pixel data pyplot.imshow(trainX[i], cmap=pyplot.get_cmap('gray')) # show the figure pyplot.show()
Импортируйте зависимости для модели, т. е. Tensorflow и Gradio (Gradio позволяет быстро создавать настраиваемые компоненты пользовательского интерфейса на основе моделей TensorFlow или PyTorch)
import tensorflow as tf import gradio as gr
Нормализация данных
(x_train, y_train),(x_test, y_test)= tf.keras.datasets.mnist.load_data() x_train = x_train/ 255.0, x_test = x_test/ 255.0
ПЕРЕД НАЧАЛОМ МОДЕЛИРОВАНИЯ И ПРОГРАММИРОВАНИЯ ДАВАЙТЕ ПОСМОТРИМ, КАКИЕ ВСЕ ФУНКЦИИ АКТИВАЦИИ МЫ ИСПОЛЬЗУЕМ В МОДЕЛИ
ReLU (выпрямленная линейная единица): ReLU обозначает выпрямленную линейную единицу и представляет собой тип функции активации. Математически это определяется как
𝑓(𝑥)=𝑚𝑎𝑥(0,𝑥)f(x)=max(0,x)
Визуально это выглядит следующим образом:
import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = np.linspace(-10, 10, 1000) y = np.maximum(0, x) plt.figure(figsize=(10, 5)) plt.plot(x, y) plt.legend(['Relu']) plt.show()
ФУНКЦИЯ СОФТМАКС
Это замечательная функция активации, которая превращает числа, также известные как логиты, в вероятности, сумма которых равна единице. Функция Softmax выводит вектор, представляющий распределения вероятностей списка потенциальных результатов.
Функция softmax — это еще один тип AF, используемый в нейронных сетях для вычисления распределения вероятностей по вектору действительных чисел. Эта функция генерирует выходные данные, которые находятся в диапазоне значений от 0 до 1, а сумма вероятностей равна 1. Функция softmax представлена следующим образом:
Обучите модель
model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape =(28,28)), tf.keras.layers.Dense(128,activation ='relu'), tf.keras.layers.Dense(10,activation = 'softmax')]) model.compile(optimizer ='adam', loss ='sparse_categorical_crossentropy', metrics = ['accuracy']) model.fit(x_train,y_train, validation_data = (x_test, y_test), epochs = 10)
Создание графического интерфейса с помощью Gradio
def classify (image): prediction = model.predict(image).tolist()[0] return {str(i): prediction [i] for i in range (10)} sketchpad = gr.inputs.Sketchpad() label = gr.outputs.Label(num_top_classes = 3) interface = gr.Interface(classify, sketchpad, label, live =True, capture_session = True)
Теперь запустите интерфейс
interface.launch() Output: Running locally at: http://127.0.0.1:7860/
Вы можете получить коды с https://github.com/abhi647/Handwriting-recognition
Или вы можете запустить код в Google Colab со страницы: https://colab.research.google.com/drive/1tt782iD87wdv6mDOVffGQ5HfQm6QC121?usp=sharing