【问题标题】:how to use tf.metrics.__ with estimator model predict output如何将 tf.metrics.__ 与估计器模型一起使用来预测输出
【发布时间】:2017-11-10 22:00:36
【问题描述】:

我尝试按照 tensorflow API 1.4 文档来实现我在学习过程中所需要的。

我现在这个阶段,可以产生一个预测对象例如:

classifier = tf.estimator.DNNClassifier(feature_columns=feature_cols,hidden_units=[10, 20, 10], n_classes=3, model_dir="/tmp/xlz_model")

predict = classifier.predict(input_fn=input_pd_fn_prt (test_f),predict_keys=["class_ids"])
label =tf.constant(test_l.values, tf.int64)

我如何在tf.metrics.auc 中使用预测和标签,例如:

out, opt = tf.metrics.auc(label, predict)

我尝试了很多不同的选择。没有明确的文档应该如何使用这些 tensorflow API。

【问题讨论】:

    标签: tensorflow model metrics


    【解决方案1】:

    函数返回2个操作:

    auc, update_op = tf.metrics.auc(...)
    

    如果您运行sess.run(auc),您将获得当前的 auc 值。这是您要报告的值,例如print sess.run([auc, cost], feed_dict={...})

    AUC 指标可能需要通过多次调用sess.run 来计算。例如,当您计算 AUC 的数据集不适合内存时。这就是 update_op 的用武之地。您需要每次调用它来累积计算 auc 所需的值。

    所以在测试集评估期间,您可能会遇到这样的情况:

    for i in range(num_batches):
        sess.run([accuracy, cost, update_op], feed_dict={...})
    
    print("Final (accumulated) AUC value):", sess.run(auc))
    

    当您想要重置累积值时(例如,在重新评估测试集之前),您应该重新初始化局部变量。 tf.metrics 包明智地将其累加器变量添加到局部变量集合中,默认情况下不包括权重等可训练变量。

    sess.run(tf.local_variables_initializer())  # Resets AUC accumulator variables
    

    https://www.tensorflow.org/api_docs/python/tf/metrics/auc

    【讨论】:

    • 大卫,感谢您的 cmets。我现在尝试做的是找出 tensorflow API,架构是如何工作的。所以用 tf.InteractiveSession() 测试代码。我运行并调试: pr = classifier.predict(input_fn=input_pd_fn_prt (test_f)) 我可以看到 pr 中的值。然后我尝试使用带有 pr 和 label 的 tf.metrics.auc 来获取 auc 信息。然后在这个阶段,我得到错误:AttributeError:'generator'对象没有属性'dtype'。准确率,update_op = tf.metrics.auc(label, pr) 预测应该在 pr 中返回估计结果,对吗?我如何将 pr infor 用于 tf.metrics.auc。
    • 不,您的预测不会被tf.metrics.auc 覆盖。 tf.metrics.auc 函数创建新变量,这些变量累积 true_positivestrue_negativesfalse_positives。这些变量不会返回给您,但如果您在 tensorboard 中显示图表,您会看到它们。当您请求 auc 张量(计算值,而不是变量)时,它会根据这些累加器变量计算 auc 度量。 update_op 操作根据prlabel 计算tp、tn、fp,并适当地更新累加器变量。 prlabel 绝不会更改。
    • 好的,谢谢。我认为 tf.metrics.auc 作为一个 API,你将模型中的标签和预测值传递给它,它返回 auc 值。我的问题是如何从可用于 tf.metrics.auc 的估计器模型(例如 DNNClassifier)中提取预测值。在 tensorflow API 文档中,它没有记录 predict() 函数返回什么以及如何使用返回值。比如我需要调试发现DNNClassifier predict()返回概率、class_ids、classes...其他人只能通过找一些例子来使用DNNClassifier,或者深挖实现。
    • Tensorflow 是一个通用库,它不像 SciKit Learn 那样工作,没有高级预测功能,这会限制您使用特定的实现。您的预测值是网络输出层的 OP。如果您使用 softmax/cross entropy 损失函数,您可能会在网络的顶层传递给tf.softmax_cross_entropy_with_logits,要获得预测,只需使用您在其中传递的值并将tf.nn.softmax 应用于它以获得您的预测分布。
    • 然后您通常会在其上运行tf.argmax 以获取特定的预测标签。基本上,你必须自己在 tensorflow 中进行操作。它不是为你在任何地方完成的。
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2019-10-30
    • 1970-01-01
    • 2020-05-14
    相关资源
    最近更新 更多