Архив метки: keras

Сравнение 3ёх фреймворков для машинного обучения: Keras, TensorFlow и PyTorch

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

Keras — это открытая библиотека для построения нейронных сетей. Написана на Python. По сути это обертка поверх TensorFlow. Идеалогически построена для быстрого прототипирования глубоких нейронных сетей.

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

Pytorch — основное отличие заключается в том, что разработана была в Facebook AI, поэтому имеет несколько другой интерфейс. Однако многим разработчикам нравится именно библиотека, хоть она и слабее распространена

Параметры сравнения библиотек
* простота использования
* скорость работы
* архитектура
* легкость отладки
* наличие подготовленных наборов данных
* популярность

1.простота использования
Keras — обладает наиболее высокоуровневым API, позволяет работать поверх TensorFlow, CNTK и Theano. Завоевал популярность благодаря синтаксической простоте, способствуя быстрой разработке.
TensorFlow — является одноверменно и высокоуровневой библиотекой так и позволяет вносить изменения в нейронную сейть на весьма низком уровне.
Pytorch — предоставляет низкоуровневый API, ориентированный непосредственно на работу с массивами матриц. Он приобрел огромный интерес в академической среде и в научных исследованиях по глубокому обучению.

2. Скорость/производительность
Производительность в Keras немного ниже чем в Tensorflow и PyTorch, которые обеспечивают
примерно одинаковую скорость, подходящую для серъёзных нагруженных проектов.

3. архитектура
В Keras реализована относительно простая архитектуру, является более читабельной и краткой. С этой стороны, Tensorflow более сложен, хоть Keras и базируется на нем. PyTorch же имеет сложную архитектуру и читаемость кода на нем меньше в сравнении с Keras

4. легкость отладки
В Keras обычно очень редко возникает необходимость отладки простых сетей. Большой набор примеров и армия разработчиков на Keras позволит быстро локализовать ошибку.
В Tensorflow отладка наверняка займет больше времени.
Pytorch обладает хорошим набором инструментов для отладки по сравнению с двумя другими.

5. Работа с датасетами
Keras обычно используется для небольших наборов данных, поскольку он несколько медленнее. А вот TensorFlow и PyTorch используются для высокопроизводительных моделей и большие датасеты не должны вызвать затруднения.

6. популярность
В связи с растущим спросом на технологию глубокого машинного обучения эти три фреймворка приобрели огромную популярность среди python разработчиков. Согласно гугл-трендам, Keras возглавляет список и становится самым популярным, за ним следуют TensorFlow и PyTorch с некоторым отставанием.

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

Keras наиболее подходит когда для Вас важны:
* Быстрое прототипирование
* При малом наборе данных
* Поддержка сообщества

TensorFlow наиболее подходит когда для Вас важны:
* Работа с большими наборами данных
* Высокая производительность
* функциональность

PyTorch наиболее подходит когда для Вас важны:
* гибкость
* малая продолжительность обучения библиотеки
* быстрая отладка

Простой пример нейронной сети на keras и tensorflow с тремя слоями

В данном посте будет показано, как инициализировать нейроннуй сеть на python, задать слои, обучить и получить предсказанные результаты. Пример сделан на python3, а в прослойке между tensorflow установлена библиотека Keras. Чтобы было понятнее — все входные параметры будут подписаны.
И так, нейронные сети очень мощный и не тривиальный инструмент в руках дата-инженера. Однако большинство продвижений в области машинного обучения в последние годы связано именно с нейронными сетями.
Установка:
keras и tensorflow ставится через pip: pip3 install keras и pip3 install —upgrade tensorflow
Отмечу, что здесь мы установили tensorflow для CPU, использование GPU даёт существенный прирост скорости, но и поставить посложнее.

Общий путь
1) Создание модели
2) Компилирование модели
3) Загрузка/подготовка данных
4) Обучение нейронной сети
5) Предсказание

Импорт библиотек:
import numpy as np
# Для создания простых моделей используют Sequential,
# При использовании Sequential достаточно добавить несколько своих слоев.
# Для более сложных моделей уже надо будет использовать Functional API
from keras.models import Sequential
from keras.layers import Dense # Dense — один из типов слоёв в Keras для создания слоя нейронов

Использовать будем бинарную классификацию, т.е. по набору фич надо определить принадлежит ли объект классу или нет.
Данные можете взять свои или например из этого файла data.txt. В нём есть 8 фич, а последний столбец показывает принадлежность классу

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

# загружаем данные с фичами
dataset = np.loadtxt("data.txt", delimiter=",")
# Первые 8 столбцов в примере отвечают за фичи, последний же за класс, разбиваем 
X = dataset[:,0:8]
Y = dataset[:,8]

# Создаём модель!
model = Sequential()
# Добавляем первый слой Dense, первое число 12 - это количество нейронов, 
# input_dim - количество фич на вход
# activation -  функция активации, полулинейная функция max(x, 0) 
# именно полулинейные функции позволяют получать нелинейные результаты с минимальными затратами
model.add(Dense(12, input_dim=8, activation='relu'))
# добавляем второй слой с 8ю нейронами
model.add(Dense(8, activation='relu'))
# на выходе при бинарной классификации, функцию активации чаще всего используют sigmoid , реже softmax
# Компилирование модели. binary_crossentropy - опять же не случайно, а т.к. у нас два класса.
# Метрика accuracy используется практически для всех задач классификации
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Наконец дошли до обучения модели, X и Y - понятно, 
# epoch - максимальное количество эпох до остановки
# batch_size - сколько объектов будет загружаться за итерацию
model.fit(X, Y, epochs=15, batch_size=10,  verbose=2)
# Предсказание
predictions = model.predict(X)

Создание высокоточной нейронной сети - непростое задание. Порой хорошо работающие сетки получают случайно, и сложно объснить почему именно они хорошо работают. Поэтому дальше можете поиграть с разными параметрами. Заглядывая наперед - один из способов подбора гиперпараметров нейронной сети - использование библиотеки hyperopt, которая пытается сделать предсказать результирующую функцию, вместо перебора всех параметров, т.к. перебор параметров может быть уж сильно долгим.
Таким образом на выходе мы получаем обученную нейронную сеть на keras . Для использования этой сети в будущем, проще всего использовать model.save(filepath) . Обращу внимание, что picke не рекомендуется. А для загрузки сохраненной ранее модели: keras.models.load_model(filepath).