Python tf.estimator.predict slow与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

我目前正在使用用于推荐任务的。具体来说,我是为了自己的目的而修改的。我不能说教程对新用户很友好。由于这是我第一次与TensorFlow交互,我只是想让它运行

正如您可能注意到的,它没有说明如何进行预测,所以在我完成了模型的训练之后,我修改了它的函数来进行预测。这是我的密码

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。你是说我的预测函数看起来不错?没有任何东西看起来会导致机器的冗余操作,或者可以进行优化?从您发布的代码来看,一切都很好