【问题标题】:Add extra columns into test dataset in addition to Features and Labels除了特征和标签之外,将额外的列添加到测试数据集中
【发布时间】:2019-07-16 19:56:23
【问题描述】:

我正在使用tf.contrib.data.make_csv_dataset 将我的 CSV 数据转换为数据集,该数据集可以很好地为 CSV 中的指定列提供功能和标签。

如何从 CSV 中指定我可能希望在模型测试期间可用但不用于训练和模型计算的额外列?例如,在评估测试准确性时,我想知道 CSV 数据集中哪些特定行的预测是错误的。有没有办法提供一个额外的参数,我可以利用它来找出模型到底出了什么问题?

现在代码看起来像这样(基于 Tensorflow 示例页面):

test_dataset = tf.contrib.data.make_csv_dataset(
    CSV_file,
    BATCH_TEST_SIZE,
    column_names=column_names,
    select_columns=column_select,
    label_name=label_name,
    num_epochs=1,
    shuffle=False)\
        .map(pack_features_vector)

然后在测试期间,代码会这样做:

for (x, y) in test_dataset:
    logits = model(x)
    prediction = tf.argmax(logits, axis=1, output_type=tf.int32)

    print('Act\t{}\nPred\t{}\n\n'.format(y, prediction))

由于生成器函数仅提供 xy 值,我怎么能说具体从原始 CSV 文件中的哪一行预测可能是错误的?

我怎么能这样做

for (x, y, z) in test_dataset:
print(z[x])

z 是那个额外的列,然后我可以检查它?

【问题讨论】:

  • 我很困惑你想如何存储不正确的预测。您的意思是,如果您说每个数据点有 10 个特征向量,您希望将错误预测的数据点存储在新列中?另外,您使用的是什么类型的 ML 方法?请解释一下。
  • 我不想存储它们。我只想在模型测试期间显示它们。我有一个简单的二元分类器。在训练周期之后,测试周期从测试数据集中加载特征和标签,计算预测并显示准确性。我还想显示在该周期中加载的行中预测错误的行。这些特性本身并没有告诉我太多(尽管我想我可以将它们作为一个极端的选择来猜测哪些行有问题)

标签: python-3.x tensorflow


【解决方案1】:

感谢您澄清您的问题。我相信您正在寻找的答案是通过在 keras 中使用 model.predict_classes() 来查看哪些行被错误地预测。以下代码应为您提供模型猜测的数组:

predictionArr = model.predict_classes(testData).reshape(-1)

这将为您提供一个包含测试数据集长度的数组,您可以在其中比较基本事实。

希望这对您有所帮助并回答您的问题!

【讨论】:

  • 感谢您的建议,但这并不是我想要的。此外,如果对测试数据集进行批处理(对我而言),此函数会引发错误。根据我所了解的内容,这看起来像是一个 keras 问题......
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
相关资源
最近更新 更多