如何调试非常准确的TensorFlow模型?

时间:2016-12-28 23:30:48

标签: tensorflow

我正在尝试根据https://www.tensorflow.org/tutorials/wide/的教程创建一个模型,但我似乎在某种程度上破坏了我的数据,因为我非常怀疑一个非常天真的97.9%的准确性模型。

我将训练和评估数据与以下代码分开,这对我来说似乎是合理的:

  total_results = len(results)
  # Withhold some results from training for evaluation.
  withhold_index = total_results * 9 / 10
  training_df = get_data_frame_from_results(results[:withhold_index])
  eval_df = get_data_frame_from_results(results[withhold_index:])

然而,这给了我看起来太高的数字:

accuracy: 0.979
accuracy/baseline_label_mean: 0.021
accuracy/threshold_0.500000_mean: 0.979
auc: 0.443042
global_step: 200
labels/actual_label_mean: 0.021
labels/prediction_mean: 0.0288264
loss: 0.288538
precision/positive_threshold_0.500000_mean: 0.0
recall/positive_threshold_0.500000_mean: 0.0

模型创建/评估在这里发生:

  def train_input_fn():
    return input_fn(training_df)

  def eval_input_fn():
    return input_fn(eval_df)

  m = tf.contrib.learn.LinearClassifier(
      feature_columns=[...],
      model_dir=model_dir)
  m.fit(input_fn=train_input_fn, steps=200)
  eval_results = m.evaluate(input_fn=eval_input_fn, steps=1)

我怀疑这里有一个简单的错误,但我没有看到它。

2 个答案:

答案 0 :(得分:1)

您正在使用不平衡数据集,其中一个类中的示例数明显高于另一个类。对于这种不平衡问题,随机预测器可以通过预测所有测试数据的多数类标签来轻松实现高精度。

要正确验证此模型的性能,您可以查看auc。你实现的auc只有0.44,非常差。使用不平衡数据集验证问题性能的更好指标是auc_precision_recall。我怀疑如果打印出来,这个问题的auc_precision_recall会相当小(例如0.02)。

您可以阅读这篇文章,以便更好地了解auc: https://classeval.wordpress.com/simulation-analysis/roc-and-precision-recall-with-imbalanced-datasets/

答案 1 :(得分:0)

这取决于您的型号和数据。您可以通过过度拟合在训练集上获得100%的准确度,并且people在MNIST的测试集上获得<1%的错误率。