【问题标题】:understanding tensorflow binary image classification results理解 tensorflow 二值图像分类结果
【发布时间】:2020-09-18 04:44:13
【问题描述】:

在我第一次尝试使用张量流时,我遵循了二进制图像分类教程https://www.tensorflow.org/tutorials/keras/text_classification_with_hub#evaluate_the_model

我能够很好地遵循教程,但后来我想尝试更仔细地检查结果,即我想看看模型对测试数据集中的每个项目做出了什么预测。

简而言之,我想看看它将预测的“标签”(1 或 0)应用于给定的电影评论。

所以我尝试了:

results = model.predict(test_data.batch(512))

然后

for i in results: print(i)

这让我接近了我的预期。 25,000 个条目的列表(每个电影评论一个)。

但是数组中每一项的值并不是我所期望的。我期待看到一个预测的标签,所以要么是 0(表示负数),要么是 1(表示正数)。

但是我得到了这个:

[0.22731477]
[2.1199656]
[-2.2581818]
[-2.7382329]
[3.8788114]
[4.6112833]
[6.125982]
[5.100685]
[1.1270659]
[1.3210837]
[-5.2568426]
[-2.9904163]
[0.17620209]
[-1.1293088]
[2.8757455]
...and so on for 25,000 entries.

谁能帮我理解这些数字的含义。

我是否误解了“预测”方法的作用,或者(因为这些数字看起来类似于模型第一层中引入的词嵌入向量)也许我误解了预测与词嵌入层和最终分类标签。

我知道这是一个重要的新手问题。但感谢您的帮助和耐心:)

【问题讨论】:

  • 好像需要用softmax将分数转换成概率。

标签: python tensorflow machine-learning


【解决方案1】:

根据您提供的链接,问题来自您的输出激活函数。该代码使用具有 1 个没有激活函数的神经元的密集向量。所以它只是将前一层的输出与权重和偏差相乘,然后将它们相加。您获得的输出将介于 -infinity(负类)和 +infinity(正类)之间,因此,如果您真的希望输出介于 0 和 1 之间,则需要一个激活函数,例如 sigmoid model.add(tf.keras.layers.Dense(1), activation='sigmoid')。现在我们只是将所有事物映射到 0 到 1 的范围内,因此如果输出小于 0.5(中点),我们可以将其分类为负类,反之亦然。

其实你对预测函数的理解是正确的。您只是没有添加激活以符合您的假设,这就是为什么您使用该输出而不是 0 和 1 之间的值。

【讨论】:

  • 我遇到了同样的问题,并将 sigmoid 激活添加到我的 Dense(1) 层,但现在训练不再起作用并且停留在 0.5 精度。有任何想法吗?我正在使用来自Image classification tutorial 的代码。
  • 刚刚创建一个新问题,我需要看看你的实现。
猜你喜欢
  • 2019-08-07
  • 2023-03-10
  • 1970-01-01
  • 2018-09-21
  • 2021-03-26
  • 2016-09-23
  • 2016-02-15
  • 1970-01-01
  • 2021-06-08
相关资源
最近更新 更多