Бэкенд Keras: TensorFlow и Theano / keras 3

273

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()
Python data course

Для изменения движка выполните следующие шаги:

  • Откройте конфигурационный файл в любом текстовом редакторе.
    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. Также было показано сравнение эффективности модели нейронной сети на обоих движках.

Учитесь программировать по книгам, подписывайте на телеграм каналы:

Книги Python разработчика RU / EN

Книги / Data Science / RU-EN

Тест на знание python

Что выведет этот код?
Какой будет результат выполнения кода — print(+-1) ?
Какой будет результат выполнения этого кода?
Какой код выведет строку — "C:\Common\testString.doc" ?
Какая функция разворачивает список задом наперед?
Александр
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ. Пишу на популярные темы: веб-разработка, работа с базами данных, data sciense и другие...