在我的项目中,我使用的是预制估计器DNNClassifier
。
这是我的估计值:
model = tf.estimator.DNNClassifier(
hidden_units=network,
feature_columns=feature_cols,
n_classes= 2,
activation_fn=tf.nn.relu,
optimizer=tf.train.ProximalAdagradOptimizer(
learning_rate=0.1,
l1_regularization_strength=0.001
),
config=chk_point_run_config,
model_dir=MODEL_CHECKPOINT_DIR
)
当我使用eval_res = model.evaluate(..)
评估模型时,
我得到以下警告:
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
我如何切换到谨慎的插值以从evaluate()
方法得到正确的结果?在
Tensorflow版本:1.8
不幸的是,使用预先制作的估计器几乎没有自由定制评估过程。目前,
DNNClassifier
似乎没有提供一种调整评估指标的方法,对于其他估计器也是如此。在尽管不理想,但一种解决方案是使用^{} 用所需的度量来扩充估计器,如果将完全相同的密钥分配给新的度量,则将替换旧的度量:
它的优点是为任何产生概率预测的估计器工作,而代价是仍然为每个评估计算覆盖的度量。} 构建的多标签分类器中,
DNNClassifier
估计器在键'logistic'
下提供逻辑值(介于0和1之间)(罐装估计器中可能的键列表是here)。对于其他估计器头,这种情况可能并不总是如此,但也可能有其他选择:在用^{logistic
不可用,但可以使用probabilities
。在因此,代码如下所示:
评估时,警告消息仍将出现,但稍后将调用具有谨慎插值的AUC。将这个度量值分配给另一个键,还可以检查两种求和方法之间的差异。我在一个多标签logistic回归任务上的测试显示,测量结果可能确实略有不同:auc_precision_recall=0.05173396,auc_precision_recall_carriend=0.05059402。在
尽管documentation表明谨慎的插值是“严格优先”的,但默认的求和方法仍然是
'trapezoidal'
,这也是一个原因。作为commented in pull request #19079,该更改将明显向后不兼容。对同一个请求的后续注释建议了上面的解决方法。在相关问题 更多 >
编程相关推荐