Python tf.estimator.predict slow与tensorflow排名模块
我目前正在使用用于推荐任务的。具体来说,我是为了自己的目的而修改的。我不能说教程对新用户很友好。由于这是我第一次与TensorFlow交互,我只是想让它运行 正如您可能注意到的,它没有说明如何进行预测,所以在我完成了模型的训练之后,我修改了它的函数来进行预测。这是我的密码Python tf.estimator.predict slow与tensorflow排名模块,python,tensorflow,machine-learning,ranking,tensorflow-estimator,Python,Tensorflow,Machine Learning,Ranking,Tensorflow Estimator,我目前正在使用用于推荐任务的。具体来说,我是为了自己的目的而修改的。我不能说教程对新用户很友好。由于这是我第一次与TensorFlow交互,我只是想让它运行 正如您可能注意到的,它没有说明如何进行预测,所以在我完成了模型的训练之后,我修改了它的函数来进行预测。这是我的密码 def _train_op_fn(loss): """Defines train op used in ranking head.""" update_ops = tf.compat.v1.ge
def _train_op_fn(loss):
"""Defines train op used in ranking head."""
update_ops = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.UPDATE_OPS)
minimize_op = optimizer.minimize(
loss = loss, global_step = tf.compat.v1.train.get_global_step())
train_op = tf.group([minimize_op, update_ops])
return train_op
ranking_head = tfr.head.create_ranking_head(
loss_fn = tfr.losses.make_loss_fn(loss),
eval_metric_fns = get_eval_metric_fns(),
train_op_fn = _train_op_fn
)
estimator =tf.estimator.Estimator(
model_fn=tfr.model.make_groupwise_ranking_fn(
group_score_fn=make_score_fn(),
group_size = group_size,
transform_fn=make_transform_fn(),
ranking_head=ranking_head),
config=tf.estimator.RunConfig(
output_dir, save_checkpoints_steps=1000))
def predict_(feature_dict = {}):
if feature_dict == {}:
feature_dict = input_fn()
pred_fn, pred_hook = get_eval_inputs(feature_dict)
generator_ = estimator.predict(input_fn = pred_fn, hooks = [pred_hook])
pred_list = list(generator_)
return pred_list
预测
函数使用字典
{'feature 1':[doc 1 score, doc 2 score...],
'feature 2':[doc 1 score, doc 2 score...],
...}
并按该顺序返回所有文档的列表a分数。(或者至少我认为它应该这样做)
预测结果很好。问题是,它真的很慢。预测400个文档需要超过1秒的时间(我只有4个特性)。这是正常速度还是代码中有优化空间?我听说tf.estimator每次进行预测时都会重新加载图表,但我不知道这是否是问题所在。您是在CPU或GPU上运行您的模型吗?我对此没有做任何处理。所以我相信默认情况下它是在CPU上运行的。这是一个决定因素吗?如果速度是一个问题,你应该始终在GPU上运行tf,它的速度是~20倍谢谢你,我正在尝试tensorflow GPU。你是说我的预测函数看起来不错?没有任何东西看起来会导致机器的冗余操作,或者可以进行优化?从您发布的代码来看,一切都很好