python - 针对特定指标在 tensorflow 中进行优化

标签 python tensorflow machine-learning

有没有什么方法可以让我们针对特定指标使用内置的 Tensorflow 优化器进行优化?如果没有,如何实现这一目标?例如。如果我只想专注于最大化分类器的 F 分数,是否可以在 tensorflow 中做到这一点?

estimator = tf.estimator.LinearClassifier(
  feature_columns=feature_cols,
  config=my_checkpointing_config,
  model_dir=output_dir,
  optimizer=lambda: tf.train.FtrlOptimizer(
      learning_rate=tf.train.exponential_decay(
          learning_rate=0.1,
          global_step=tf.train.get_or_create_global_step(),
          decay_steps=1000,
          decay_rate=0.96)))

我正在尝试在获得更好的 F 分数的基础上专门优化我的分类器。尽管使用了逐渐下降的学习率和 300 个训练步骤,但我得到的结果不一致。在检查日志中的指标时,我发现精度召回准确度的行为非常不稳定。尽管增加了训练步骤的数量,但并没有明显的改善。所以我想如果我能让优化器更多地关注提高整体的 F 分数,我可能会得到更好的结果。因此就有了这个问题。我有什么遗漏的吗?

最佳答案

在分类设置中,优化器最大限度地减少损失,例如交叉熵;准确性、F 分数、精确度、召回率等数量本质上是业务指标,它们在优化过程中不会(也不可能)直接最小化。

这是一个在 SO 中以各种伪装频繁出现的问题;这里有一些线索,希望能帮助您理清这些概念(尽管它们指的是准确度、精确度和召回率,但 F 分数的论点完全相同):

Loss & accuracy - Are these reasonable learning curves?

Cost function training target versus accuracy desired goal

Is there an optimizer in keras based on precision or recall instead of loss?

底线,改编我自己的(链接的)答案之一:

损失和准确性或 F 分数等指标是不同的东西;粗略地说,从商业角度来看,像准确率和 F 分数这样的指标是我们真正感兴趣的,而损失是学习算法(优化器)试图从最小化的目标函数。 em>数学角度。更粗略地说,您可以将损失视为业务目标(准确性、F 分数等)到数学领域的“翻译”,这种翻译在分类问题中是必要的(在回归问题中,通常是损失和业务目标相同,或者至少原则上可以相同,例如 RMSE)...

关于python - 针对特定指标在 tensorflow 中进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52371714/

相关文章:

python - Pandas 数据帧 : groupby then transpose

python - 使用 Flask 设置 Chartkick 时遇到问题

python - TensorFlow 与 keras : Where is the ReLU layer in tf version 1. 8?

python - 如果指定输出数量,如何计算 CNN 中的输出维度

Python 单元测试哲学和排序

python - 回归损失函数不正确

python - 将队列附加到 tensorflow 中的 numpy 数组以获取数据而不是文件?

r - kNN - r 中有很多关系

machine-learning - TensorflowJS TFJS 错误 : The dtype of dict

python - SKL学习如​​何获取 LinearSVC 分类器的决策概率