Keras поддерживает разный бэкенд и его производительность сильно зависит от сделанного выбора. В этом материале речь пойдет о двух самых распространенных вариантах: TensorFlow и Theano. Создадим модель нейронной сети и проверим ее производительность на примерах.
Бэкенд Keras
Keras — это высокоуровневый API для разработки нейронных сетей, поэтому низкоуровневыми вычислениями он не занимается. Для этих целей он опирается на «бэкенд-движки». Поддержка реализована в модульном виде, что значит, что к Keras можно присоединить несколько движков.
TensorFlow и Theano — самые распространенные варианты
TensorFlow
Это платформа для машинного обучения с открытым исходным кодом, разработанная в Google и выпущенная в ноябре 2015 году.
Theano
Это библиотека Python, созданная для управления и оценки математических выражений, созданная Университетом Монреаля и выпущенная в 2007 году.
Изменения движка Keras
По умолчанию движком бэкенда Keras является TensorFlow. Чтобы убедиться в этом, проверьте конфигурационный файл по этому пути:
$HOME/.keras/keras.json
Он выглядит следующим образом:
{
"image_data_format": "channels_last",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}
Или импортируйте Keras и введите:
keras.backend.backend()
Для изменения движка выполните следующие шаги:
- Откройте конфигурационный файл в любом текстовом редакторе.
subl $HOME/.keras/keras.json
- Измените значение
backend
наtheano
- Проверьте используемый движок
Движок в игре меняется в один шаг. Не нужно ничего менять в самом коде, а дальше мы увидим, как можно запускать модели Keras на разных движках.
Проверим модель на разных движках Keras
Создадим нейронную сеть типа многослойный перцептрон для бинарной классификации. Проверим производительность модели на основе времени тренировки и ее точности.
Сначала используем TensorFlow.
В этом примере использовалось железо со следующей конфигурацией:
- Процессор Intel Core i5 7-го поколения
- Keras 2.3.1
- Python 3.6.0
- TensorFlow 1.14.0
- Theano 1.0.4
Результаты относительны и могут отличаться в зависимости от конфигураций систем и разных версий библиотек.
Создадим нейронную сеть
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
Сгенерируем случайный ввод для тестирования
x_train=np.random.random((1000,20))
y_train=np.random.randint(2,size=(100,1))
x_test=np.random.random((100,20))
y_test=np.random.randint(2,size=(100,1))
Создадим модель
model=Sequential()
model.add(Dense(64, input_dim=20,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid'))
Скомпилируем модель
model.compile(loss='binary_crossentropy', optimizer='rmsprop',metrics=['accuracy'])
Для вычисления времени тренировки используем модуль Time
из Python.
Добавим переменные до и после тренировки.
import time
start=time.time()
model.fit(x_train,y_tarin,epochs=20,batch_size=128)
end=time.time()
print("running time: ",end-start)
Посчитаем величину потерь и точность модели
score=model.evaluate(x_test,y_test,batch_size=128)
print("score: ",score)
Можно увидеть, что тренировка этой модели заняла 0,5446 секунд, величина потерь — 0,6998, а точность — 0,4199
Теперь переключимся на Theano и выполним те же шаги.
Тренировка этой модели заняла 1,066 секунд, величина потерь — 0,6747, а точность — 0,6700. В системе с этим примером TensorFlow сработал быстрее, но у Theano выше точность.
Выводы
Этот материал объясняет поддержку разных движков в Keras и показывает, как между ними переключаться. В качестве примеров были использованы TensorFlow и Theano. Также было показано сравнение эффективности модели нейронной сети на обоих движках.