tf.keras.predict () намного медленнее, чем прогнозирует Keras () - PullRequest
0 голосов
/ 09 мая 2020

При использовании Keras, который входит в состав Tensorflow (Tensorflow 2), я заметил серьезное увеличение времени вычислений при использовании функции predict() из Keras, встроенного в Tensorflow, и predict() из автономного Keras. См. Код игрушки ниже:

import tensorflow
import keras
import numpy as np
import time

test = np.array([[0.1, 0.1, 0.1, 0.1, 0.1, 0.5, 0.1, 0., 0.1, 0.2]])

# Keras from inside Tensorflow
model_1 = tensorflow.keras.Sequential([
  tensorflow.keras.layers.Dense(1, activation='relu', input_shape=(10,)),
])

start_1 = time.time()
for i in range(1000):
    result = model_1.predict(test)
elapsed_time_1 = time.time() - start_1

# Standalone Keras
model_2 = keras.models.Sequential([
  keras.layers.Dense(1, activation='relu', input_shape=(10,)),
]) 

start_2 = time.time()
for i in range(1000):
    result = model_2.predict(test)
elapsed_time_2 = time.time() - start_2

print(elapsed_time_1)
print(elapsed_time_2)

Результатом кода ниже на моей машине будет

17.82757878303528
0.31248927116394043

Ожидается, что predict() из tensorflow.keras должен принимать такое же количество времени для той же задачи по сравнению с predict() от автономного Keras.

Мои вопросы:

  1. Почему это происходит?
  2. Как я могу это исправить?

Мои характеристики:

Python версия: Python 3.6.8

Версия Keras: 2.3.1

Версия Tensorflow: 2.1.0

Работает на Windows 10

1 Ответ

2 голосов
/ 11 мая 2020

Это в основном из-за нетерпеливого исполнения. Вы можете отключить активное выполнение с помощью

tensorflow.compat.v1.disable_eager_execution()

. При этом tf.keras по-прежнему примерно в 2 раза медленнее, что я не знаю почему, но не на порядки. Оба они go даже быстрее, если заранее преобразовать в тензоры.

...