Я попытался получить оценку времени предсказания моей модели керас и понял что-то странное. Помимо того, что обычно достаточно быстро, время от времени модели требуется довольно много времени, чтобы составить прогноз. И не только это, эти времена также увеличиваются, чем дольше модель работает. Я добавил минимальный рабочий пример для воспроизведения ошибки.
import time
import numpy as np
from sklearn.datasets import make_classification
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
# Make a dummy classification problem
X, y = make_classification()
# Make a dummy model
model = Sequential()
model.add(Dense(10, activation='relu',name='input',input_shape=(X.shape[1],)))
model.add(Dense(2, activation='softmax',name='predictions'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(X, y, verbose=0, batch_size=20, epochs=100)
for i in range(1000):
# Pick a random sample
sample = np.expand_dims(X[np.random.randint(99), :], axis=0)
# Record the prediction time 10x and then take the average
start = time.time()
for j in range(10):
y_pred = model.predict_classes(sample)
end = time.time()
print('%d, %0.7f' % (i, (end-start)/10))
Время не зависит от выборки (она выбирается случайным образом). Если тест повторяется, индексы для l oop, где прогнозирование длится дольше, снова будут (почти) одинаковыми.
![enter image description here](https://i.stack.imgur.com/m0alO.png)
Я использую:
tensorflow 2.0.0
python 3.7.4
Для моего приложения мне нужно гарантировать выполнение в определенное время. Это, однако, невозможно, учитывая такое поведение. Что не так? Это ошибка в Keras или ошибка в бэкэнде tenorflow?
EDIT: predict_on_batch
показывает то же поведение, но более разреженное: ![enter image description here](https://i.stack.imgur.com/AlsJQ.png)
y_pred = model(sample, training=False).numpy()
также показывает некоторые тяжелые выбросы, но они не увеличиваются. ![enter image description here](https://i.stack.imgur.com/xbpyX.png)
РЕДАКТИРОВАТЬ 2: Я понизил до последней версии TenorFlow 1 (1.15). Мало того, что проблема больше не существует, также значительно улучшилось «нормальное» время прогнозирования! Я не считаю эти два всплеска проблемными c, так как они не появились, когда я повторил тест (по крайней мере, не с теми же показателями и линейно увеличивающимися) и в процентном отношении не так велики, как на первом графике. ![enter image description here](https://i.stack.imgur.com/MlI9W.png)
Таким образом, мы можем заключить, что эта проблема, по-видимому, присуща тензорному потоку 2.0, который демонстрирует аналогичное поведение в других ситуациях, как упоминает @OverLordGoldDragon.