Python + opencv + keras: делаем распознавалку текста за полчаса
Содержание:
Многоуровневый бэкенд Keras и tf.keras.
В настоящее время мы рекомендуем пользователям Keras, которые используют многоуровневый бэкенд Keras с бэкендом TensorFlow, переключиться на tf.keras в TensorFlow 2.0. tf.keras имеет более качественную поддержку и интеграцию с функциями TensorFlow.
Keras 2.2.5 — последняя версия Keras, реализующая API 2.2. и поддерживая только TensorFlow 1 (а также Theano и CNTK).
Текущая версия Keras — Keras 2.3.0, в которой внесены существенные изменения в API и добавлена поддержка TensorFlow 2.0. Версия Keras 2.3.0 будет последней версией многоуровневого бэкенда Keras, который заменяется на tf.keras.
Ошибки многоуровневого бэкенда Keras будут исправляться только до апреля 2020 г. (в качестве небольших изменений версии).
Больше информации о планируемых изменениях Keras смотрите на: the Keras meeting notes.
Сохранение/загрузка только весов модели.
If you need to save the weights of a model, you can do so in HDF5 with the code below:
model.save_weights(‘my_model_weights.h5’)
Если предположить, что у вас есть код для инстанцирования вашей модели, то вы можете загрузить сохраненные веса в модель с той же архитектурой:
model.load_weights(‘my_model_weights.h5’)
Если вам нужно загрузить веса в другую архитектуру (с некоторыми общими слоями), например, для тонкой настройки или переноса-обучения, вы можете загрузить их по имени слоя:
model.load_weights(‘my_model_weights.h5’, by_name=True)
Пример:
«»»
Assuming the original model looks like this:
model = Sequential()
model.add(Dense(2, input_dim=3, name=’dense_1′))
model.add(Dense(3, name=’dense_2′))
…
model.save_weights(fname)
«»»
# новая модель
model = Sequential()
model.add(Dense(2, input_dim=3, name=’dense_1′)) # будет загружена
model.add(Dense(10, name=’new_dense’)) # не будет загружена
# загрузить веса первой модели; относится только к последнему слою, dense_1.
model.load_weights(fname, by_name=True)
Также смотрите Как установить HDF5 или h5py для сохранения моделей Keras? Для получения инструкций по установке h5py
Сделайте предсказания
Теперь, когда модель обучена, мы можем использовать ее чтобы сделать предсказания по поводу нескольких изображений:
Здесь полученная модель предсказала класс одежды для каждого изображения в проверочном датасете. Давайте посмотрим на первое предсказание:
array(, dtype=float32)
Прогноз представляет из себя массив из 10 чисел. Они описывают «уверенность» (confidence) модели в том, насколько изображение соответствует каждому из 10 разных видов одежды. Мы можем посмотреть какой метке соответствует максимальное значение:
9
Модель полагает, что на первой картинке изображен ботинок (ankle boot), или class_names. Проверка показывает, что классификация верна:
9
Мы можем построить график, чтобы взглянуть на полный набор из 10 предсказаний классов.
Давайте посмотрим на нулевое изображение, предсказание и массив предсказаний.


Давайте посмотрим несколько изображений с их прогнозами. Цвет верных предсказаний синий, а неверных — красный. Число это процент уверенности (от 100) для предсказанной метки. Отметим, что модель может ошибаться даже если она очень уверена.

Наконец, используем обученную модель для предсказания класса на одном изображении.
(28, 28)
Модели tf.keras оптимизированы для предсказаний на пакетах (batch) данных, или на множестве примеров сразу. Таким образом, даже если мы используем всего 1 картинку, нам все равно необходимо добавить ее в список:
(1, 28, 28)
Сейчас предскажем правильную метку для изображения:
]

Метод возвращает нам список списков, по одному для каждой картинки в пакете данных. Получите прогнозы для нашего (единственного) изображения в пакете:
9
И, как и ранее, модель предсказывает класс 9.
Keras широко применяется в промышленности и исследовательском сообществе.

Диаграмма фреймерков глубокого обучения, рассчитанная Джеффом Хейлом на основе 11 источников данных по 7 категориям.
С середины 2018 Keras получил признание у более чем 250 тыс. персональных пользователей в различных областях. Это больше, чем в любом другом фреймворке, за исключением TensorFlow (при том, что API Keras является официальным фронтендом TensorFlow, через модуль tf.keras).
Вы уже не раз сталкивались с приложениями, созданными с помощью Keras — Netflix, Uber, Yelp, Instacart, Zocdoc, Square и др. Keras особенно популярен в стартапах, которые берут принципы глубокого обучения за основу своих продуктов.
Keras является одним из лидеров у исследователей глубокого обучения, занимая второе место по количеству упоминаний в научных статьях, загруженных на сервер arXiv.org. Keras также используется в исследованиях, проводимых большими научными компаниями, в частности CERN и NASA.
Keras позволяет легко превратить модель в готовый продукт.
Модели, созданные в Keras могут быть легко развернуты на большем количестве платформ, чем у любого другого фреймворка глубокого обучения:
- На iOS через Apple CoreML (поддержка Keras официально предоставляется Apple). Учебник.
- На Android через среду исполнения TensorFlow. (Пример: приложение Not Hotdog).
- В браузере с помощью графического ускорителя JavaScript ( и WebDNN).
- В Google Cloud, через TensorFlow-Serving.
- В веб-приложении Python (например: приложение Flask).
- На JVM, через импорт модели DL4J, предоставляемый SkyMind.
- На Raspberry Pi.
Keras поддерживает несколько бэкенд движков и не блокирует вас в пределах одной экосистемы.
Вы можете разрабатывать свои модели Keras с помощью различных бэкендов глубокого обучения. Главная особенность состоит в том, что любая модель, использующая только встроенные слои, будет переносимой из одного бэкенда в другой. Доступные бэкенды:
- TensorFlow (от Google)
- CNTK (от Microsoft)
- Theano
У Amazon также есть свой фреймворк Keras, который использует MXNet в качестве бэкенда.
Таким образом, ваша модель Keras может быть обучена на различных аппаратных средствах (помимо процессоров):
- NVIDIA GPUs
- Google TPUs, через бэкенд TensorFlow и Google Cloud
- Графические процессоры с поддержкой OpenCL, такие как AMD (через бэкенд PlaidML Keras)
Keras обладает мощной поддержкой multi-GPU и распределенной поддержкой обучения.
- Keras имеет встроенную поддержку для параллельной обработки данных с помощью multi-GPU
- Horovod, от Uber, имеет первоклассную поддержку моделей Keras.
- Модели Keras можно превратить в оценочные функции TensorFlow и обучить их работе на кластерах графических процессоров в Google Cloud.
- Keras можно запускать на Spark через Dist-Keras (из CERN) и Elephas.
Разработка Keras поддерживается ключевыми компаниями в экосистеме глубокого обучения.
Разработка Keras поддерживается главным образом Google, а API Keras поставляется в TensorFlow как tf.keras. Кроме того Microsoft поддерживает бэкенд CNTK Keras. Amazon AWS поддерживает фреймворк MXNet Keras. В разработке участвуют и другие крупные компании: NVIDIA, Uber, Apple (с CoreML) и др.




evaluate
evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)
Возвращает значение потерь и метрики для модели в тестовом режиме.
Вычисление производится партиями.
Аргументы
x: Входные данные. Возможно:
Массив Numpy (или массив типа), или список массивов (в случае, если модель имеет несколько входов).
Словарь, сопоставляющий имена входных данных с соответствующими массивами/тензорами, если модель имеет имена входных данных.
Генератор или keras.utils.Sequence return (входы, цели) или (входы, цели, веса дискретов).
Нет (по умолчанию), если питание осуществляется от собственных тензоров фреймворка (например, тензоры данных TensorFlow).
y: Целевые данные. Как и входные данные x, это могут быть либо массив(ы) Нампи, независимый от структуры тензор(ы), список массивов Нампи (если модель имеет несколько выходов) или нет (по умолчанию), если питание осуществляется от независимого от структуры тензора (например, тензоры данных TensorFlow). Если выходные слои в модели имеют имена, можно также передать в Numpy массивы имена выходных слоев, отображенные в словаре. Если x — генератор, или keras.utils.Sequence экземпляр, то y указывать не следует (так как цели будут получены из x).
batch_size: Целое или Нет. Количество отсчетов на обновление градиента. Если не указано, то по умолчанию параметр batch_size будет равен 32. Не указывайте размер переменной batch_size, если ваши данные представлены в виде символических тензоров, генераторов или экземпляров keras.utils.Sequence (поскольку они генерируют партии).
подробный: 0 или 1. Режим вербозности. 0 = беззвучный, 1 = шкала прогресса.
sample_weight: Дополнительный массив весов Numpy для тестовых образцов, используемый для взвешивания функции потерь. Можно либо передать плоский (1D) Numpy-массив с той же длиной, что и входные образцы (1:1 отображение между весами и образцами), либо, в случае временных данных, передать 2D-массив с формой (образцы, sequence_length), чтобы к каждому временному шагу каждого образца применить разный вес. В этом случае в функции compile() необходимо обязательно указать sample_weight_mode=»temporal».
steps: Целое или нет. Общее количество шагов (партий отсчетов) перед объявлением раунда оценки завершенным. Игнорируется значением по умолчанию None.
обратные вызовы: Список keras.callbacks.callback экземпляров. Список обратных вызовов, которые будут применяться во время оценки. См. список обратных вызовов.
max_queue_size: Целое. Используется только для ввода генератора или keras.utils.Sequence. Максимальный размер для очереди генератора. Если не указано, по умолчанию max_queue_size будет равен 10.
workers: Целое число. Используется только для ввода генератора или keras.utils.Sequence. Максимальное количество процессов для раскрутки при использовании потоковой обработки процессов. Если не указано, то по умолчанию рабочие будут равны 1. Если 0, то генератор будет выполняться в главном потоке.
use_multiprocessing: Булева. Используется только для ввода генератора или keras.utils.Sequence. Если Правда, используйте потоковую обработку на основе процесса. Если не указано, то по умолчанию use_multiprocessing будет False
Обратите внимание, что поскольку эта реализация основана на многопроцессорной обработке, вы не должны передавать генератору невыбираемые аргументы, так как они не могут быть легко переданы дочерним процессам.
Исключения
ValueError: в случае недействительных аргументов.
Возвращает
Скалярные тестовые потери (если модель имеет один выход и не имеет метрик) или список скаляров (если модель имеет несколько выходов и/или метрик). Атрибут model.metrics_names даст вам метки отображения для скалярных выходов.
Импортируйте tf.keras
является реализацией TensorFlow
спецификации Keras API. Это высокоуровневый
API для построения и обучения моделей включающий первоклассную поддержку для
TensorFlow-специфичной функциональности, такой как eager execution,
конвейеры , и Estimators.
делает использование TensorFlow проще не жертвуя при этом гибкостью и
производительностью.
Для начала, импортируйте как часть установки вашей TensorFlow:
может выполнять любой Keras-совместимый код, но имейте ввиду:
- Версия в последнем релизе TensorFlow может отличаться от
последней версии в PyPI. Проверьте . - При сохранении весоа моделей, делает это по умолчанию
в формате checkpoint. Передайте параметр для
использования HDF5 (или добавьте к имени файла расширение ).
Keras учитывает опыт разработчиков.
- Keras — это API, разработанный для людей, а не для машин. Keras использует передовые методы снижения когнитивной нагрузки: он предлагает согласованный и простой API, минимизирует количество действий пользователя, необходимых для решения распространенных задач, предоставляет четкую и действенную обратную связь в случае возникновения ошибок.
- Все это делает Keras простым в изучении и использовании. Будучи пользователем Keras, вы становитесь более продуктивным, получаете возможность воплощать все ваши идеи быстрее своих конкурентов, что может позволит вам выигрывать соревнования по машинному обучению.
- Эта простота использования не ведет к ограничению гибкости: поскольку Keras интегрируется с языками более низкого уровня (в частности TensorFlow), у вас появляется возможность реализовать все задачи, которые вы могли бы решить на базовом языке. В частности, как и tf.keras, API Keras легко интегрируется с вашими рабочими задачами TensorFlow.
Xception
keras.applications.xception.Xception(include_top=True, weights=’imagenet’, input_tensor=None, input_shape=None, pooling=None, classes=1000)
Модель Xception V1, с весами, предварительно подготовленными на ImageNet.
На ImageNet эта модель получает точность валидации топ-1 0,790 и точность валидации топ-5 0,945.
Данная модель и может быть построена как в формате данных ‘channels_first’ (каналы, высота, ширина), так и в формате данных ‘channels_last’ (высота, ширина, каналы).
Входной размер по умолчанию для данной модели — 299×299.
Аргументы
- include_top: включать ли полностью подключенный слой в верхнюю часть сети.
- weights: один из None (случайная инициализация) или ‘imageenet’ (предварительное обучение на ImageNet).
- input_tensor: необязательный тензор Keras (т.е. вывод layers.Input()) для использования в качестве входного изображения для модели.
- input_shape: необязательный кортеж-фигура, который должен быть указан только в том случае, если include_top — False (в противном случае входная форма должна быть (299, 299, 3). Она должна иметь ровно 3 входных канала, а ширина и высота должны быть не меньше 71. Например, (150, 150, 3) будет одно действительное значение.
- pooling: Дополнительный режим объединения в пулы для извлечения функций, когда include_top — False.
- None означает, что выход модели будет 4D тензорным выходом последнего сверточного блока.
- avg» означает, что к выходу последнего сверточного блока будет применен глобальный средний пул, и, таким образом, на выходе модели будет 2D тензор.
- «max» означает, что к выходу модели будет применено глобальное максимальное объединение.
- Классы: необязательное количество классов для классификации изображений, указывается только в том случае, если include_top имеет значение True и аргумент весов не указан.