Как рекомендовано большинством людей, я решил испачкать руки в области компьютерного зрения, играя со знаменитым набором данных MNIST, чтобы создать распознавание цифр.
Ссылка на приложение: https://usamasubhani.tech/projects/digit-recognizer Исходный код: https://github.com/usamasubhani/digit-recognizer
Примечание: Это первая итерация моего первого проекта Computer Vision. Я буду улучшать этот проект (и этот пост), когда узнаю больше.
Оглавление
- Набор данных
- Обучение и тестирование
- Обучение
- Тестирование
- Веб -приложение + развертывание
- Развертывание на Героку
Набор данных
Считается набор данных «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”