Как установить keras python windows

Обновлено: 07.07.2024

В этом материале вы узнаете, как установить Keras на ОС Linux и Windows, а также ознакомитесь с проблемами, которые могут возникнуть в процессе, и требованиями для установки.

Как установить Keras на Linux

Keras — это фреймворк Python для глубокого обучения, поэтому в первую очередь нужно, чтобы Python был установлен в системе.

В Ubuntu он есть по умолчанию. Рекомендуется использовать последнюю версию, то есть python3. Для проверки наличия его в системе выполните следующее:

  1. Откройте терминал (Ctrl+Alt+T)
  2. Введите python3 -V или python3 –version

Выводом будет версия Python 3.

Если Python 3 не установлен, воспользуйтесь следующими инструкциями:

    Добавьте PPA , запустив следующую команду

Теперь пришло время устанавливать Keras.

Но сначала нужно установить один из бэкенд-движков: Tensorflow, Theano или Microsoft CNTK. Лучше всего использовать первый.

Установите Tensorflow из PyPl:

Теперь установка Keras:

  • Установите Keras из PyPl:
  • Или установите его из Github:
  1. Клонируйте репозиторий
  2. Перейдите в папку keras
  3. Запустите команду install

Как установить Keras на Windows?

Прежде чем переходить к установке Keras, нужно убедиться, что в системе есть Python. Нужна версия как минимум Python 3.5+.

Для проверки установленной версии:

  1. Откройте cmd
  2. Введите python -V или python –version

Отобразится текущая версия Python.

Если Python не установлен или загружена более старая версия:

Теперь нужно установить один из движков: Tensorflow, Theano или Microsoft CNTK. Рекомендуется использовать первый.

Установите Tensofrflow с помощью пакетного менеджера pip3:

Теперь установите Keras

  • Установите Keras из PyPl:
  • Установите Keras из Github
    Клонируйте git-репозиторий

Создайте первую программу в Keras

Создадим регрессионную предсказательную модель на основе данных о ценах Boston Housing с помощью Keras. Данные включают 13 признаков домов и включают 506 объектов. Задача — предсказать цены.

Это классическая регрессионная проблема машинного обучения, а набор данных доступен в модуле Keras.dataset .

Реализация:

Нормализация данных

Построение нейронной сети

Тренировка модели

Оценка модели с помощью среднеквадратической ошибки модели и средней абсолютной ошибки

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

Выводы

Статья посвящена пошаговой установке Keras в Linux (Ubuntu) и Windows. Она также включает базовую реализацию предсказательной модели ценообразования Boston Housing, которая является хорошо исследованной регрессионной проблемой моделирования в машинном обучении.

После изучения необходимых теоретических аспектов, мы готовы к построению и обучению НС. На одном из прошлых занятий по back propagation, мы буквально вручную прописывали алгоритм обучения и структуру сети. Но, это не лучший путь. Особенно, когда сеть становится большой, а критериев качества и методов оптимизации – пруд пруди. Гораздо проще воспользоваться одним из пакетов по разработке и обучению нейросетей. Благо, что на сегодняшний день их масса. Вот диаграмма популярности таких фреймворков, взятая из официальной документации по Keras:


Как видим, по состоянию на 2018 год лидером является TensorFlow, разработанный компанией Google, специально для создания сетей самой разной структуры. Кроме того, TensorFlow позволяет проводить обучение на графических процессорах (GPU), компьютеров объединенных в сеть. Это значительно повышает скорость работы алгоритмов. Но TensorFlow – относительно низкоуровневый фреймворк. Проектировать на нем НС все равно, что писать программу на ассемблере (машинном коде), вместо того, чтобы воспользоваться языками высокого уровня. Как раз другие фреймворки из диаграммы и являются, своего рода, такими языками. Они значительно упрощают процесс проектирования нейросетей. И, в частности, один из самых популярных пакетов Keras является некой надстройкой, оболочкой над TensorFlow:


То есть, используя API Keras, мы в действительности создаем нейросеть на TensorFlow, но делаем это гораздо быстрее. Кроме того, API Keras является официальным фронтендом TensorFlow и мы можем им воспользоваться, просто установив TensorFlow. Для этого нужно выполнить в терминале команду:

pip install tensorflow

Начнется установка, достаточно долгая, т.к. пакет весьма объемный. Дополнительно, мне пришлось установить еще модуль:

pip install tf-nightly

Возможно, еще придется установить Keras как самостоятельный пакет:

pip install keras

Но это все индивидуально и вам не стоит торопиться этого делать, сначала попробуйте только первую команду.

Теперь, начиная с версии

автоматически используется GPU процессора. Для этого на компьютере должно быть установлено специальное ПО:

CUDA для GPU TensorFlow

Иначе, будут выдаваться предупреждения, всякий раз при запуске программы. Но я не стал устанавливать дополнительное ПО, а просто вначале программы пишу строчки:

И предупреждения перестают отображаться. Как поступить вам, решайте сами.

Итак, после установки, можно проверить корректность работы TensorFlow и Keras с помощью двух импортов:

Если здесь программа не выдает никаких ошибок, то, скорее всего, пакеты были успешно установлены и готовы к работе.

Еще один вариант – использовать коллабораторию гугла:

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

Он очень прост в использовании, поэтому нет смысла его объяснять. Преимущество здесь в том, что вам понадобится только браузер и выход в интернет, чтобы начать проектировать и обучать НС. Это хорошая стартовая площадка. Возможно, я буду показывать часть программ здесь.

Пример построения сети на Keras

Итак, теперь, когда мы с вами разобрались с установкой Keras, давайте воспользуемся его API для построения и обучения простой НС. Сначала я думал взять один из примеров предыдущего занятия, но потом в документации увидел интересную реализацию: перевода градусов Цельсия в градусы Фаренгейта. Общая формула, такая:


Это один из примеров задачи регрессии, когда на выходе сети формируется числовое значение, в данном случае – градусы по Фаренгейту. Итак, для такого преобразования достаточно взять следующую нейросеть с линейной функцией активацией:


Выходное значение будет формироваться как:


Очевидно, что в рамках нашей задачи:


Давайте построим такую простейшую сеть и выполним ее обучение. Сначала импортируем необходимые модули:

Я чуть позже поясню: что здесь что. Далее, в качестве обучающего множества будем использовать два списка:

И, затем, определим модель НС, как последовательную, т.е. состоящую из слоев, идущих друг за другом. Именно такие НС мы рассматривали на наших занятиях:

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


Здесь units=1 означает один нейрон, а input_shape=(1,) – один вход. Конструктор Dense формирует полносвязный слой, то есть, все входы будут связаны со всеми нейронами данного слоя. В нашем простейшем случае – это связь и дополнительно, автоматически, для каждого нейрона добавляется смещение – bias.

Теперь, когда структура НС определена, ее нужно скомпилировать, указав критерий качества и способ оптимизации алгоритма градиентного спуска. В рамках данной задачи мы выберем минимум среднего квадрата ошибки и оптимизацию по Adam:

Видите, нам здесь понадобились знания теоретического материала прошлых занятий. Мы теперь знаем, что такое 'mean_squared_error' и когда его выбирать, а также знакомы с принципом оптимизации по Adam и знаем зачем это нужно. Здесь и далее без теоретического материала не обойтись. А вот это значение 0,1 – это шаг сходимости алгоритма обучения. Мы его обозначали через лямбда:


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

Для запуска обучения используется метод fit:

Здесь передается обучающая выборка для входных и выходных значений, затем, число эпох, т.е. выборка будет пропущена через сеть 500 раз и на каждой итерации будут корректироваться весовые коэффициенты и вычисляться значение критерия качества. Последний параметр указывает не отображать в консоли текущую информацию при обучении сети. Мы ее выведем после, используя объект log:

Здесь идет обращение к истории, берутся значения критерия качества (функции потерь – loss function) и отображаются в виде графика.

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


То есть, наш критерий качества уже на 400-й эпохе практически перестал уменьшаться. Хорошо, теперь было бы интересно узнать как работает сеть и какие весовые коэффициенты были найдены. Чтобы подать на вход произвольное значение, нужно воспользоваться методом predict:

Он возвратит выходное значение и мы его отобразим в консоли. А для отображения весовых коэффициентов, запишем метод get_weights:

Снова запустим программу и в консоли увидим строчки:

[[211.27545]]
[array([[1.8292068]], dtype=float32), array([28.35477], dtype=float32)]

Нейросеть перевела 100 градусов Цельсия в 211 градусов по Фаренгейту, что близко к истине:


А весовые коэффициенты были определены как 1,8 и 28 – также близко к требуемым величинам.

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

В качестве самостоятельного задания, установите у себя пакет TensorFlow и повторите этот пример.

На следующем занятии мы продолжим знакомиться с API Keras на примерах решения уже более сложных задач.

Видео по теме


Нейронные сети: краткая история триумфа

































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


Цель:Установить основанную на Python среду для машинного обучения.

Когда я впервые попал в машинное обучение, мне потребовалось несколько часов, чтобы понять, как правильно настроить мою среду Python. Из-за разочарования я решил написать этот пост, чтобы помочь любому, кто проходит через этот процесс. Мы начнем с установки Anaconda Navigator, которая позволит нам создавать независимые среды, это очень удобно. Кроме того, с помощью Anaconda мы можем легко установить совместимые модули Python с помощью очень простых команд. Наконец, мы можем использовать Anaconda, чтобы получить Spyder - научную среду разработки Python. Если вы выполните пошаговую процедуру, показанную ниже, у вас сразу же будут установлены Tensorflow, Keras и Scikit-learn.

Чтобы начать строить модели машинного обучения (ML) с помощью Python, мы начнем с установки Anaconda Navigator. Anaconda предоставляет эффективный и простой способ установки модулей Python на ваш компьютер. Итак, начнем.

    и установите последнюю версию Anaconda Navigator для вашей операционной системы.


2. Продолжите работу с мастером установки, но пропустите шаг, на котором вам нужно скачать и установить VS, мы сделаем это позже. Кроме того, обязательно установите Anaconda Navigator для одного пользователя. В то время, когда был написан этот набор инструкций, установка VS с помощью мастера настройки привела к сбою установки Anaconda. Кроме того, установка Anaconda для всех пользователей может привести к проблемам. Например, вы не сможете установить какие-либо модули, потому что Anaconda не будет обладать необходимыми привилегиями.


Убедитесь, что вы установили Anaconda для текущего пользователя, иначе у вас могут возникнуть проблемы в будущем.


3. Запустите Anaconda Navigator и выберите вкладку «Главная», она должна быть выбрана по умолчанию. Найдите панель кода VS и нажмите кнопку «Установить». Это займет минуту или две.


После установки VS Code вы сможете увидеть кнопку запуска под панелью VS Code.

Теперь, когда мы установили Anaconda, давайте добавим Keras и Tensorflow на нашу машину.

4. Закройте Anaconda Navigator и запустите Anaconda Prompt. Запустите Anaconda, выполнив поиск в строке поиска Windows. Следующий терминал должен открыться. Обратите внимание, что это откроется набазаАнаконда среда.


5. Понизьте Python доKeras&Tensorflowсовместимая версия. Анаконда начнет искать все совместимые модули для Python 3.6. Это может занять несколько минут. Чтобы перейти на Python 3.6, используйте следующую команду:

conda install python=3.6


После разрешения среды Anaconda покажет вам все пакеты, которые будут загружены.

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

conda create --name PythonGPU

Примечание. Убедитесь, что у вас есть видеокарта NVIDIA. Если вы этого не сделаете, установите версию процессора Keras.

Если вы хотите использовать свой процессор вместо этого, выполните следующую команду:

conda create --name PythonCPU

Следуйте инструкциям, отображаемым на терминале. Среды Conda дают пользователю возможность устанавливать очень специфические модули, которые являются независимыми средами обитания. Лично я создал две среды. Один, где я могу строить свои модели, используя процессор, а другой - где я могу строить свои модели, используя графический процессор. Для получения дополнительной информации о среде conda, я предлагаю вам взглянуть наофициальная документация,

7. Для активации только что созданной среды conda:

activate PythonGPU или activate PythonCPU

Для деактивации среды используйте:

Пока не деактивируйте среду, мы собираемся установить все хорошее.


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

conda install -c anaconda keras-gpu

Если вы хотите использовать свой процессор для построения моделей, вместо этого выполните следующую команду:

conda install -c anaconda keras

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

Теперь вы можете захотеть, чтобы какое-то программное обеспечение написало и выполнило ваши скрипты Python. Вы всегда можете использоватьнапорнаписать и отредактировать свои скрипты Python и открыть другой терминал для их выполнения. Тем не менее, вы упустите все интересные функции Spyder.

9. УстановитьSpyder.

conda install spyder

10. УстановитьПанды, Pandas - это чрезвычайно мощная библиотека, которая позволяет легко читать, манипулировать и визуализировать данные.

conda install -c anaconda pandas

Если вы хотите читать файлы Excel с помощью Pandas, выполните следующие команды:

conda install -c anaconda xlrd

conda install -c anaconda xlwt

11. Установитерожденное моребиблиотека Seaborn - это удивительная библиотека, которая позволяет вам легко визуализировать ваши данные.

conda install -c anaconda seaborn

12. Установить Scikit-Learn.

conda install -c anaconda scikit-learn

13. Установите подушку для обработки изображений

conda install pillow

К настоящему времени вы должны чувствовать себя комфортно при установке модулей с помощью команды conda. Если вам нужен конкретный модуль, просто найдите что-нибудь в Google:

Anaconda LibraryNameYouWant Install

Если у вас возникнут проблемы, поищите в Интернете. Скорее всего, вы не первый, кто столкнулся с данной ошибкой.

Чтобы запустить Spyder, сначала активируйте требуемую среду conda (PythonCPU или PythonGPU) и выполните следующую команду:

Чтобы убедиться, что все установлено правильно, выполните следующие строки кода на консоли python:


Если вы не видите ошибок ModuleImport, вы готовы приступить к созданию моделей на основе машинного обучения с использованием Keras, Tensorflow и Scikit-Learn.

Как начать работу с Keras

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

В сегодняшней статье мы рассмотрим, что представляет собой Keras, а также поговорим о таком понятии, как Deep Learning.

Что такое Keras

Keras – это библиотека для Python, позволяющая легко и быстро создавать нейронные сети. Она совместима с TensorFlow, Theano, Microsoft Cognitive Toolkit и MXNet. Первые две платформы наиболее используемы для разработки алгоритмов глубокого обучения, но довольно сложны в освоении. Keras же, напротив, представляет собой отличный вариант для тех, кто только начинает изучение нейронных сетей.

Что такое Keras

Создатель библиотеки Франсуа Шолле, инженер Google, разработал Keras для того, чтобы максимально упростить процесс создания нейронных сетей. Упор был на расширяемости, модульности и минимализме с поддержкой Python.

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

Из особенностей принято выделять следующие факторы:

  • Удобство для пользователя. Keras был разработан для пользователей, а не для машин – он использует особые методы: предлагает согласованный и простой API, минимизирует количество действий пользователя, необходимых для решения распространенных задач. В случае возникновения ошибок всегда можно обратиться в поддержку за обратной связью.
  • Модульность. Под этим мы понимаем последовательность или граф автономных, полностью сконфигурированных модулей, которые могут быть подключены без дополнительных ограничений. Например, это могут быть нейронные слои, функции ошибки, оптимизаторы, схемы инициализации, функции активации и схемы регуляризации – все эти модули можно комбинировать для создания модели.
  • Расширяемость. Возможность легко добавлять новые классы, модули и функции делает Keras отличным средством для проведения различных исследований.
  • Работа сPython. Все модели были написаны на языке программирования Python, поэтому код всегда компактен и легко читается.

Что такое глубокое обучение

Глубокое обучение (от англ. Deep learning) – это совокупность методов машинного обучения, позволяющая обучать модель и предсказывать результат по набору входных данных. Технология основана на искусственных нейронных сетях. Они получают алгоритмы обучения и объемы данных, которые постоянно растут для повышения эффективности обучения. Чем больше данных – тем эффективнее процесс.

Что такое deep learning

Обучение называется глубоким, потому что со временем нейронная сеть покрывает все большее количество уровней. Подобный процесс состоит из двух фаз – обучения и формирования выводов. Первый рассматривается как способ маркировки больших объемов данных и определение их характеристик, которые в последующем сравниваются и запоминаются системой. Это необходимо для того, чтобы сделать правильные выводы, когда система повторно сталкивается с подобными данными.

Этапы глубокого обучения:

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

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

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

Эти типы глубоких нейронных сетей называются свёрточными нейронными сетями. Они представляют собой многослойные нейронные сети, которые предполагают, что входные данные являются изображениями.

Модели глубокого обучения в Keras

В основе Keras лежат модели, основной тип которых – последовательность, представляющая собой линейный стек слоев.

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

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

Также есть еще один тип моделей – это класс Model, используемый с функциональным API.

Как установить Keras

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

Также вам могут потребоваться следующие компоненты:

  • cuDNN – требуется, если необходимо проводить расчеты с использованием GPU;
  • HDF5 и h5py – предназначены для сохранения моделей Keras на диск;
  • graphviz и pydot – используются утилитами визуализации для построения графов моделей.

После этого можно переходить к установке Keras, сделать это можно с помощью одной команды:

Альтернативная команда – установка из репозитория GitHub. Для начала потребуется сделать клон:

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

Работа с Keras на примере

Рассмотрим работу Keras с движком TensorFlow на примере базовых операций: загрузки набора данных, построения модели, добавления параметров, компиляции, тренировки и оценки. С их помощью мы создадим собственный классификатор рукописных цифр на основе набора данных MNIST.

Шаг 1: Используем набор помеченных данных

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

Шаг 2: Загружаем необходимые слои

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

Нам потребуются следующие слои:

Также для классификатора используем свёрточную нейронную сеть:

Шаг 3: Используем метод предварительной обработки данных

Будем использовать метод Keras.np_utils.to_categorical() для унитарной кодировки y_train и y_test. Выглядит он следующим образом:

Шаг 4: Используем метод add()

Для добавления импортированных слоев воспользуемся методом add():

Шаг 5: Используем метод compile()

Данный метод предназначен для процесса обучения:

Шаг 6: Используем метод fit()

Тренировку выполним с помощью метода fit():

Выглядит тренировка следующим образом:

Тренировка нейронной сети Python

Шаг 7: Оцениваем модель

Следующий этап после тренировки – проверка результатов на новых данных либо с помощью методов predict_classes() или evaluate(). Возьмем в качестве примера изображение:

Распознание рукописных цифр на Python

Первым делом конвертируем его в нужный нам формат набора – MNIS. Затем попробуем распознать:

Шаг 8: Сохраняем модель

Как я уже говорил ранее, Keras является модульным – таким образом, мы можем сохранить модель и использовать ее в последующем:

Вот такими несложными действиями у нас получилось создать классификатор рукописных цифр – в этом и есть прелесть Keras. Это отличное решение для тех, кто только-только начинает вникать в нейронные сети и хочет поближе познакомиться с глубоким обучением.

Привет, Хабр! Мы уже говорили про Theano и Tensorflow (а также много про что еще), а сегодня сегодня пришло время поговорить про Keras.

Изначально Keras вырос как удобная надстройка над Theano. Отсюда и его греческое имя — κέρας, что значит "рог" по-гречески, что, в свою очередь, является отсылкой к Одиссее Гомера. Хотя, с тех пор утекло много воды, и Keras стал сначала поддерживать Tensorflow, а потом и вовсе стал его частью. Впрочем, наш рассказ будет посвящен не сложной судьбе этого фреймворка, а его возможностям. Если вам интересно, добро пожаловать под кат.

image

Начать стоит от печки, то есть с оглавления.

  • [Установка]
  • [Бэкенды]
  • [Практический пример]
    • [Данные]
    • [Модель]
      • [Sequential API]
      • [Functional API]
      • [Tensorboard]

      Установка

      Установка Keras чрезвычайно проста, т.к. он является обычным питоновским пакетом:

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

      ВНИМАНИЕ: Чтобы работать с Keras, у вас уже должен быть установлен хотя бы один из фреймворков — Theano или Tensorflow.

      Бэкенды

      Бэкенды — это то, из-за чего Keras стал известен и популярен (помимо прочих достоинств, которые мы разберем ниже). Keras позволяет использовать в качестве бэкенда разные другие фреймворки. При этом написанный вами код будет исполняться независимо от используемого бэкенда. Начиналась разработка, как мы уже говорили, с Theano, но со временем добавился Tensorflow. Сейчас Keras по умолчанию работает именно с ним, но если вы хотите использовать Theano, то есть два варианта, как это сделать:

      1. Отредактировать файл конфигурации keras.json, который лежит по пути $HOME/.keras/keras.json (или %USERPROFILE%\.keras\keras.json в случае операционных систем семейства Windows). Нам нужно поле backend :
      2. Второй путь — это задать переменную окружения KERAS_BACKEND , например, так:

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

      Также существует MXNet Keras backend, который пока не обладает всей функциональностью, но если вы используете MXNet, вы можете обратить внимание на такую возможность.

      Еще существует интересный проект Keras.js, дающий возможность запускать натренированные модели Keras из браузера на машинах, где есть GPU.

      Так что бэкенды Keras ширятся и со временем захватят мир! (Но это неточно.)

      Практический пример

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

      Данные


      Вот пример содержания документа из обучающей выборки:

      From: lerxst@wam.umd.edu (where's my thing)
      Subject: WHAT car is this!?
      Nntp-Posting-Host: rac3.wam.umd.edu
      Organization: University of Maryland, College Park
      Lines: 15

      I was wondering if anyone out there could enlighten me on this car I saw
      the other day. It was a 2-door sports car, looked to be from the late 60s/
      early 70s. It was called a Bricklin. The doors were really small. In addition,
      the front bumper was separate from the rest of the body. This is
      all I know. If anyone can tellme a model name, engine specs, years
      of production, where this car is made, history, or whatever info you
      have on this funky looking car, please e-mail.

      • IL
        — brought to you by your neighborhood Lerxst ----

      Препроцессинг

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

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

      Первое число — количество документов в выборке, а второе — размер нашего словаря (одна тысяча в этом примере).

      Еще нам понадобится преобразовать метки классов к матричному виду для обучения с помощью кросс-энтропии. Для этого мы переведем номер класса в так называемый one-hot вектор, т.е. вектор, состоящий из нулей и одной единицы:

      На выходе получим также бинарные матрицы вот таких размеров:

      Как мы видим, размеры этих матриц частично совпадают с матрицами данных (по первой координате — числу документов в обучающей и тестовой выборках), а частично — нет. По второй координате у нас стоит число классов (20, как следует из названия датасета).

      Модель

      Модель в Keras можно описать двумя основными способами:

      Sequential API

      Первый — последовательное описание модели, например, вот так:

      Functional API

      Некоторое время назад появилась возможность использовать функциональное API для создания модели — второй способ:

      Принципиального отличия между способами нет, выбирайте, какой вам больше по душе.
      Класс Model (и унаследованный от него Sequential ) имеет удобный интерфейс, позволяющий посмотреть, какие слои входят в модель — model.layers , входы — model.inputs , и выходы — model.outputs .

      Также очень удобный метод отображения и сохранения модели — model.to_yaml .

      Это позволяет сохранять модели в человеко-читаемом виде, а также инстанциировать модели из такого описания:

      Важно отметить, что модель, сохраненная в текстовом виде (кстати, возможно сохранение также и в JSON) не содержит весов. Для сохранения и загрузки весов используйте функции save_weights и load_weights соответственно.

      Визуализация модели

      Нельзя обойти стороной визуализацию. Keras имеет встроенную визуализацию для моделей:

      Этот код сохранит под именем model.jpg вот такую картинку:


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

      Если вы захотите отобразить ее в jupyter -ноутбуке, вам нужен немного другой код:

      Важно отметить, что для визуализации нужен пакет graphviz, а также питоновский пакет pydot . Есть тонкий момент, что для корректной работы визуализации пакет pydot из репозитория не пойдет, нужно взять его обновленную версию pydot-ng .

      Пакет graphviz в Ubuntu ставится так (в других дистрибутивах Linux аналогично):

      На MacOS (используя систему пакетов HomeBrew):

      Инструкцию установки на Windows можно посмотреть здесь.

      Подготовка модели к работе

      Итак, мы сформировали нашу модель. Теперь нужно подготовить ее к работе:

      Custom loss

      Здесь y_true и y_pred — тензоры из Tensorflow, поэтому для их обработки используются функции Tensorflow.

      Для использования другой функции потерь достаточно изменить значения параметра loss функции compile , передав туда объект нашей функции потерь (в питоне функции — тоже объекты, хотя это уже совсем другая история):

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

      Наконец, пришло время для обучения модели:

      Метод fit делает именно это. Он принимает на вход обучающую выборку вместе с метками — x_train и y_train , размером батча batch_size , который ограничивает количество примеров, подаваемых за раз, количеством эпох для обучения epochs (одна эпоха — это один раз полностью пройденная моделью обучающая выборка), а также тем, какую долю обучающей выборки отдать под валидацию — validation_split .

      Возвращает этот метод history — это история ошибок на каждом шаге обучения.

      И наконец, тестирование. Метод evaluate получает на вход тестовую выборку вместе с метками для нее. Метрика была задана еще при подготовке к работе, так что больше ничего не нужно. (Но мы укажем еще размер батча).

      Callbacks

      Нужно также сказать несколько слов о такой важной особенности Keras, как колбеки. Через них реализовано много полезной функциональности. Например, если вы тренируете сеть в течение очень долгого времени, вам нужно понять, когда пора остановиться, если ошибка на вашем датасете перестала уменьшаться. По-английски описываемая функциональность называется "early stopping" ("ранняя остановка"). Посмотрим, как мы можем применить его при обучении нашей сети:

      Проведите эксперимент и проверьте, как быстро сработает early stopping в нашем примере?

      Tensorboard

      Еще в качестве колбека можно использовать сохранение логов в формате, удобном для Tensorboard (о нем разговор был в статье про Tensorflow, вкратце — это специальная утилита для обработки и визуализации информации из логов Tensorflow).

      После того, как обучение закончится (или даже в процессе!), вы можете запустить Tensorboard , указав абсолютный путь к директории с логами:

      image

      Там можно посмотреть, например, как менялась целевая метрика на валидационной выборке:

      (Кстати, тут можно заметить, что наша сеть переобучается.)

      Продвинутые графы

      Теперь рассмотрим построение чуть более сложного графа вычислений. У нейросети может быть множество входов и выходов, входные данные могут преобразовываться разнообразными отображениями. Для переиспользования частей сложных графов (в частности, для transfer learning ) имеет смысл описывать модель в модульном стиле, позволяющем удобным образом извлекать, сохранять и применять к новым входным данным куски модели.

      Наиболее удобно описывать модель, смешивая оба способа — Functional API и Sequential API , описанные ранее.

      Рассмотрим этот подход на примере модели Siamese Network. Схожие модели активно используются на практике для получения векторных представлений, обладающих полезными свойствами. Например, подобная модель может быть использована для того, чтобы выучить такое отображение фотографий лиц в вектор, что вектора для похожих лиц будут близко друг к другу. В частности, этим пользуются приложения поиска по изображениям, такие как FindFace.

      Иллюстрацию модели можно видеть на диаграмме:

      image

      Здесь функция G превращает входную картинку в вектор, после чего вычисляется расстояние между векторами для пары картинок. Если картинки из одного класса, расстояние нужно минимизировать, если из разных — максимизировать.

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

      Будем описывать модель в коде соответствующим образом, максимально упростив извлечение и переиспользование частей нейросети.

      Сначала определим на Keras функцию, отображающую входной вектор.

      Обратите внимание: мы описали модель с помощью Sequential API , однако обернули ее создание в функцию. Теперь мы можем создать такую модель, вызвав эту функцию, и применить ее с помощью Functional API ко входным данным:

      Теперь в переменных processed_a и processed_b лежат векторные представления, полученные путем применения сети, определенной ранее, к входным данным.

      Нужно посчитать между ними расстояния. Для этого в Keras предусмотрена функция-обертка Lambda , представляющая любое выражение как слой ( Layer ). Не забудьте, что мы обрабатываем данные в батчах, так что у всех тензоров всегда есть дополнительная размерность, отвечающая за размер батча.

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

      Благодаря модульной структуре мы можем использовать base_network отдельно, что особенно полезно после обучения модели. Как это можно сделать? Посмотрим на слои нашей модели:

      Видим третий объект в списке типа models.Sequential . Это и есть модель, отображающая входную картинку в вектор. Чтобы ее извлечь и использовать как полноценную модель (можно дообучать, валидировать, встраивать в другой граф) достаточно всего лишь вытащить ее из списка слоев:

      Например для уже обученной на данных MNIST сиамской сети с размерностью на выходе base_model , равной двум, можно визуализировать векторные представления следующим образом:

      Загрузим данные и приведем картинки размера 28x28 к плоским векторам.

      Отобразим картинки с помощью извлеченной ранее модели:

      image

      Теперь в embeddings лежат двумерные вектора, их можно изобразить на плоскости:

      Полноценный пример сиамской сети можно увидеть здесь.

      Заключение

      Вот и все, мы сделали первые модели на Keras! Надеемся, что предоставляемые им возможности заинтересовали вас, так что вы будете его использовать в своей работе.

      Пришло время обсудить плюсы и минусы Keras. К очевидным плюсам можно отнести простоту создания моделей, которая выливается в высокую скорость прототипирования. Например, авторы недавней статьи про спутники использовали именно Keras. В целом этот фреймворк становится все более и более популярным:

      image

      Keras за год догнал Torch, который разрабатывается уже 5 лет, судя по упоминаниям в научных статьях. Кажется, своей цели — простоты использования — Франсуа Шолле (François Chollet, автор Keras) добился. Более того, его инициатива не осталась незамеченной: буквально через несколько месяцев разработки компания Google пригласила его заниматься этим в команде, разрабатывающей Tensorflow. А также с версии Tensorflow 1.2 Keras будет включен в состав TF (tf.keras).

      Также надо сказать пару слов о недостатках. К сожалению, идея Keras о универсальности кода выполняется не всегда: Keras 2.0 поломал совместимость с первой версией, некоторые функции стали называться по-другому, некоторые переехали, в общем, история похожа на второй и третий python. Отличием является то, что в случае Keras была выбрана только вторая версия для развития. Также код Keras работает на Tensorflow пока медленнее, чем на Theano (хотя для нативного кода фреймворки, как минимум, сравнимы).

      В целом, можно порекомендовать Keras к использованию, когда вам нужно быстро составить и протестировать сеть для решения конкретной задачи. Но если вам нужны какие-то сложные вещи, вроде нестандартного слоя или распараллеливания кода на несколько GPU, то лучше (а подчас просто неизбежно) использовать нижележащий фреймворк.

      Читайте также: