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

Будучи одним из шести языков, признанных ООН, арабский язык является официальным языком около 1,8 миллиона человек по всему миру. Говоря о распространении языка, он распространился вместе с ростом ислама по всему миру. Он получил словарный запас из среднеперсидского и турецкого языков. В исламском мире в VIII веке знание арабского языка стало обязательным для всех.
Можно долго говорить об истории и развитии арабского языка, однако это не будет служить цели данной статьи. Сегодня мы узнаем, как использовать наши знания в области машинного обучения и глубокого обучения для распознавания арабских цифр.

Первым и главным шагом для подготовки нашей модели является доступ к базе данных. Для этого вы можете перейти по этой ссылке. Мы обнаружили, что наш набор данных состоит из 4 файлов csv: -
1. Обучающие изображения
2. Обучающие метки
3. Тестовые изображения
4. Тестовые метки

Мы начнем с загрузки всех файлов с помощью библиотеки pandas и посмотрим на форму набора данных.

Чтение пикселей изображения из файла csv — наш следующий шаг, за которым следует их преобразование в массив numpy.

Чтобы преобразовать наши обучающие метки в форму, доступную для нашей модели, мы будем использовать LabelBinarizaer(). Label Binarizer — это служебный класс, помогающий создать матрицу индикаторов меток из списка мультиклассовых меток. После кодирования обучающих меток следующим шагом будет изменение размера данных изображения из массива numpy.
Для нашей модели мы будем использовать входной размер 32 x 32. То есть каждое наше изображение будет иметь высоту и шириной 32px каждый.

Поскольку наши данные почти готовы для подготовки модели, мы можем визуализировать некоторые изображения, которые мы планируем использовать для обучения и тестирования нашей модели. Пишем простую функцию для визуализации сетки 5 x 5 = 25 изображений (5 строк и 5 столбцов).

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

После этого краткого обзора изображений следующим шагом будет разделение наших изображений на обучающую и тестовую части с помощью функции train_test_split() из библиотеки ScikitLearn. Для целей нашей модели мы используем тренировочно-тестовое разделение 80% и 20% соответственно.

Хорошей практикой при подготовке моделей глубокого обучения является использование функции обратного вызова Keras. Используя EarlyStopping() и отслеживая потери при проверке, наша модель прекращает обучение, если потери при проверке не уменьшаются в течение 5 эпох. Таким образом, мы обеспечиваем минимальное значение потерь, а также в некоторой степени предотвращаем переоснащение.

Следующим шагом будет определение архитектуры нашей модели Sequential. Поскольку мы имеем дело с данными изображения размером 32 x 32, мы настраиваем наш первый слой как слой двумерной свертки, за которым следует слой максимального объединения с размером фильтра 2x2. За этим «блоком» следуют 2 подобных блока, после которых мы добавляем слой Dropout. Основная функция добавления слоев Dropout — предотвратить чрезмерную подгонку. Он случайным образом отбрасывает или игнорирует несколько выходных данных слоя и сводит их к 0. Это побуждает нейронную сеть изучать разреженную сеть. Затем мы сглаживаем входные переменные, за которыми следуют несколько слоев Dense, и получаем выходной слой Dense с функцией активации, установленной на сигмоид.

Когда мы печатаем сводку модели, мы видим, что наша модель имеет около 25 000 обучаемых параметров.

Компилируя нашу модель с использованием оптимизатора Адама и категориальной кроссэнтропии в качестве функции потерь, мы начинаем обучение, устанавливая размер пакета 50 и инициализируем обучение для 100 эпох.
После завершения обучения мы наблюдаем, что мы добились точности проверки 90 % и значения потерь всего 0,2.

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

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

Мы видим, что наша модель успешна и может с большой точностью предсказывать рукописные арабские символы. Мы хорошо использовали наши знания в области машинного обучения и глубокого обучения, когда готовили эту модель. Чтобы получить доступ к полному блокноту, перейдите по этой ссылке.

Желаем удачи в вашей карьере в области машинного обучения.

Ваше здоровье!

Ссылка на блокнот: Нажмите здесь

Кредиты: Кхарбанда