Используйте TensorFlow для реализации простого процесса распознавания кода подтверждения.

TensorFlow
Используйте TensorFlow для реализации простого процесса распознавания кода подтверждения.

В этой статье мы будем использовать TensorFlow для реализации модели глубокого обучения для реализации процесса распознавания кода проверки.Идентифицированный здесь код проверки является графическим кодом проверки.Сначала мы будем использовать отмеченные данные для обучения модели, а затем использовать модель для достижения идентификации этого проверочного кода.

1. Подготовьте проверочный код

Здесь мы используем библиотеку капчи python для ее генерации.Эта библиотека не установлена ​​по умолчанию, поэтому здесь нам нужно сначала установить эту библиотеку, а также нам нужно установить библиотеку подушек

После установки мы можем использовать следующий код для создания простого графического проверочного кода.

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

2. Предварительная обработка

Предварительная обработка данных должна быть выполнена перед обучением.Теперь мы сначала определяем текстовое содержимое генерируемого кода подтверждения, что эквивалентно наличию метки, а затем мы используем его для генерации кода подтверждения, а затем мы можем получить ввод данные равны x, здесь мы сначала определяем наш входной словарь, поскольку словарный запас прописных и строчных букв и цифр относительно велик, представьте, что мы используем проверочный код, содержащий прописные и строчные буквы и цифры, проверочный код из четырех символов, затем общее Возможных комбинаций (26 + 26 + 10) ^ 4 = 14776336 комбинаций, это число немного велико для обучения, поэтому здесь мы упростим его и будем использовать для обучения только чисто цифровые проверочные коды, так что количество комбинаций станет 10 ^ 4 = 10 000 видов, очевидно, намного меньше.

Итак, здесь мы сначала определяем словарь и его переменную длины:

Здесь VOCAB — это содержание словаря, то есть 10 цифр от 0 до 9, количество символов в проверочном коде, то есть CAPTCHA_LENGTH, равно 4, а длина словаря — это длина VOCAB, которая равна 10. .

Затем мы определяем метод для генерации данных кода подтверждения, Процесс аналогичен описанному выше, за исключением того, что здесь мы преобразуем возвращенные данные в массив в форме Numpy:

Вызывая этот метод таким образом, мы можем получить массив Numpy, который фактически преобразует код проверки в RGB каждого пикселя.Давайте вызовем этот метод и попробуем:

Содержание следующее:

Вы можете видеть, что его форма (60, 160, 3), что на самом деле означает, что высота изображения капчи составляет 60, ширина — 160, и это капча 60 x 160 пикселей, каждый пиксель имеет значение RGB. , поэтому последний размерность — это значение RGB пикселя.

Далее нам нужно определить метку.Поскольку нам нужно использовать модель глубокого обучения для обучения, лучше всего использовать One-Hot кодирование для наших данных метки здесь, то есть, если текст кода проверки 1234, то словарь Позиция индекса должна быть установлена ​​​​на 1, а общая длина равна 40. Мы используем программу для реализации взаимного преобразования между кодировкой One-Hot и текстом:

Здесь метод text2vec() предназначен для преобразования реального текста в кодировку One-Hot, а метод vec2text() — для преобразования кодировки One-Hot обратно в реальный текст.

Например, здесь мы вызываем эти два метода, мы конвертируем текст 1234 в кодировку One-Hot, а затем конвертируем обратно:

Таким образом, мы можем реализовать взаимную конвертацию текста в кодировку One-Hot.

Затем мы можем создать пакет данных.Данные x — это массив Numpy кода подтверждения, а данные y — кодировка текста кода подтверждения One-Hot.Сгенерированное содержимое выглядит следующим образом:

Здесь мы определяем метод getrandomtext(), который может случайным образом генерировать текст кода проверки, а затем использовать случайно сгенерированный текст для генерации соответствующих данных x, y, а затем мы записываем данные в файл рассола, так что операция предварительной обработки выполнен.

3. Постройте модель

После того, как у нас есть данные, давайте начнем строить модель.Здесь мы все еще используем метод traintestsplit() для разделения данных на три части: обучающий набор, набор для разработки и набор для проверки:

Затем мы создаем три объекта набора данных, используя три набора данных:

Затем инициализируйте итератор и привяжите его к этому набору данных:

Далее ключевая часть. Здесь мы используем трехуровневую свертку и двухуровневую полносвязную сеть для построения. Чтобы упростить метод записи, мы напрямую используем модуль слоев TensorFlow:

Здесь размер ядра свертки равен 3, заполнение использует режим SAME, а функция активации использует relu.


После полносвязного сетевого преобразования форма y становится [размер пакета, n классов]. Наша метка состоит из векторов CAPTCHALENGTH One-Hot. Здесь мы хотим использовать перекрестную энтропию для расчета, но перекрестная энтропия рассчитывается с помощью В настоящее время сумма элементов последнего измерения вектора параметров метки должна быть равна 1, иначе возникнут проблемы при вычислении градиента. Подробнее см. в официальной документации TensorFlow:

https://www.tensorflow.org/apidocs/python/tf/nn/softmaxcrossentropywithlogits


Но текущий параметр метки представляет собой комбинацию векторов CAPTCHALENGTH One-Hot, поэтому сумма каждого элемента здесь равна CAPTCHALENGTH, поэтому нам нужно изменить ее форму, чтобы сумма каждого элемента в последнем измерении была равна 1:



Таким образом, мы можем гарантировать, что последнее измерение имеет длину VOCAB_LENGTH, и это вектор One-Hot, поэтому сумма элементов должна быть равна 1.

Затем Loss и Accuracy рассчитываются просто отлично:

Затем вы можете выполнить следующее обучение:

Здесь мы сначала инициализируем traininitializer, привязываем итератор к набору данных Train, а затем выполняем trainop, чтобы получить результаты loss, acc, gstep и т. д. и вывести их.

тренироваться

Запустив тренировочный процесс, результаты будут примерно такими:

контрольная работа

В процессе обучения мы также можем сохранять модель каждые несколько Эпох:

Конечно, вы также можете сохранить модель с высочайшей точностью на проверочном наборе.

При проверке мы можем перезагрузить модель, а затем проверить: