Я унаследовал некоторый код TF, который выполняет следующие запросы:
def predict_tf(ml_wrapper, prediction_row_df):
log.debug('request POST {}'.format(prediction_row_df))
prediction_row_df, _, _ = ml_wrapper._engineer_features(prediction_row_df)
# As method says; delete stuff we don't want and scale and impute if needed
ml_wrapper._delete_unused_values_and_scale_and_impute_missing_values(prediction_row_df, single_row_prediction=True)
features, labels = ml_wrapper._split_features_and_labels(prediction_row_df)
panda_function_for_prediction = tf.estimator.inputs.pandas_input_fn(
features,
labels,
batch_size=ml_wrapper.batch_size,
num_epochs=1,
shuffle=False
)
predictions = ml_wrapper.tf_model.predict(
input_fn=panda_function_for_prediction)
probas = list(predictions)[0]['probabilities']
log.warning('PREDICTED: no:{} yes:{}'.format(probas[0], probas[1]))
return probas
Код работает, хотя в консоли я вижу что-то вроде этого:
2018-06-06 16:32:46,767 INFO [tensorflow:116] Calling model_fn.
2018-06-06 16:32:50,848 INFO [tensorflow:116] Done calling model_fn.
2018-06-06 16:32:51,082 INFO [tensorflow:116] Graph was finalized.
2018-06-06 16:32:51,083 INFO [tensorflow:116] Restoring parameters from /model_tensorflow/model.ckpt-719
2018-06-06 16:32:51,494 INFO [tensorflow:116] Running local_init_op.
2018-06-06 16:32:51,536 INFO [tensorflow:116] Done running local_init_op.
Похоже, что эта операция занимает 4 секунды на запрос - есть ли способ загрузить модель / оценщик только один раз и прогнозировать ее?