Рубрики
Без рубрики

Распознавание цифр: проект компьютерного видения от обучения до развертывания.

Как рекомендовано большинством людей, я решил испачкать руки в области компьютерного зрения от PL … Tagged ShowDev, MachineLearning, Python, Codenewbie.

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

Ссылка на приложение: https://usamasubhani.tech/projects/digit-recognizer Исходный код: https://github.com/usamasubhani/digit-recognizer

Примечание: Это первая итерация моего первого проекта Computer Vision. Я буду улучшать этот проект (и этот пост), когда узнаю больше.

Оглавление

  1. Набор данных
  2. Обучение и тестирование
    • Обучение
    • Тестирование
  3. Веб -приложение + развертывание
    • Развертывание на Героку

Набор данных

Считается набор данных «Hello World» компьютерного зрения, набор данных MNIST содержит помеченные с изображениями серого шкалы рукописных цифр (0-9). Каждое изображение имеет 28×28 пикселей. и значения пикселя составляют от 0 до 255.

Этот набор данных очень популярен, поэтому он уже доступен в Tensorflow

Загрузить и нормализовать данные:

import tensorflow as tf
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Normailize
x_train = tf.keras.utils.normalize(X_train, axis=1)
x_test = tf.keras.utils.normalize(X_test, axis=1)

Обучение и тестирование

Обучение

Керас – это библиотека для внедрения нейронных сетей и может работать в качестве API высокого уровня для TensorFlow. Для этого проекта я использовал Последовательный модель.

Согласно Керас документация , A Последовательный Модель подходит для простой стеки слоев, где каждый слой имеет ровно один входной тензор и один выходной тензор.

Создание нейронной сети:

from keras.models import Sequential
from keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPool2D

input_shape = (28, 28, 1)

model = Sequential()
model.add( Conv2D(28, kernel_size=(3,3), input_shape=input_shape) )
model.add( MaxPool2D( pool_size=(2,2) ) )
model.add( Flatten() )
model.add( Dense(128, activation='relu') )
model.add( Dropout(0.2) )
model.add( Dense(10, activation='softmax') )

Компиляция и примерка:

# Set optimizer and loss function
model.compile( 
    optimizer = 'adam',
    loss = 'sparse_categorical_crossentropy',
    metrics = ['accuracy']
)
# Fit the model using training data
model.fit(
    x = x_train,
    y = y_train,
    epochs=10
)

Я добавлю объяснение приведенного выше кода, как только узнаю больше о нейронных сетях.

Тестирование

Проверьте точность обученной модели, работая:

model.evaluate(x_test, y_test)

Сохраните модель, работая:

model_json = model.to_json()
with open("model.json", "w") as jsonFile:
    jsonFile.write(model_json)

model.save_weights("Model_mnist.h5")

Обученная модель теперь сохраняется и может быть развернута.

Развертывание

План состоял в том, чтобы создать веб -приложение, которое позволяет пользователю рисовать цифру с помощью мыши. Я решил использовать Flask, которая является минималистской веб -структурой для Python и идеально подходит для проектов для небольших и средних масштабов.

Структура каталога для приложения Flask:

Digit-recognizer
|
└─api
| └─templates
| | └─index.html
| └─static
| | └─sketchpad.js
| └─__init__.py
|
└─model
  └─model.json
  └─modl_mnist.h5

Полный исходный код можно увидеть в репозитории GitHub. Вставка всего кода здесь будет ненужным.

Развертывание на Героку

Чтобы развернуть приложение Flask на Heroku, нам нужно 3 файла.

  • Прозвать
web: gunicorn wsgi:app
  • wsgi.py
from api import app
  • Требования.txt

Запустите это:

pip install pipreqs
pipreqs
  • Создайте проект на Heroku и подключите его к вашему репо Github.
  • Нажмите код приложения в репо. Приложение теперь развернуто на Heroku.

Вывод

Есть что улучшить. Я перечисляю здесь несколько дел, не стесняйтесь вносить свой вклад в проект или давать отзывы.

  • Улучшить модель
  • (Готово) Включите рисунок на сенсорных устройствах.

Оригинал: “https://dev.to/usamasubhani/digit-recognizer-from-training-a-neural-net-to-deployment-3k4b”