Tensorflow:训练批次中的所有项目都具有相同的预测标签

时间:2017-06-07 17:57:52

标签: machine-learning tensorflow neural-network deep-learning

我正在尝试使用Tensorflow中的卷积NN解决经典的MNIST任务。 我的输入是来自Kaggle的数据:https://www.kaggle.com/c/digit-recognizer/data

我是机器学习的新手,所以我的代码基本上是来自各种来源的复制粘贴+我自己的黑客攻击。

目前我的代码如下:https://gist.github.com/arodiss/90ea76e5f5545af6b11e7f1dcfee01b5

请注意,目前而不是输出精度我只输出预测标签(模型输出的softmax的argmax)

以下是输出结果:

[8 6 4 2 6 8 7 6 6 7 6 6 4 7 0 6]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
[9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9]
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4]
[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]
[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4]
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
[3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3]

( ... and so on)

所以基本上每个小批量除了第一个(随机)之外,所有的例子都有相同的标签,这显然是错误的。相反,当我自己输出概率时,我得到这样的东西:

[[  4.38091134e-30   1.28820540e-15   1.00000000e+00   1.73298234e-28
  7.69853474e-13   2.90028703e-19   9.43878135e-12   5.07752279e-17
  3.48896642e-33   3.62770106e-26]
[  0.00000000e+00   2.62364278e-33   3.19788233e-34   0.00000000e+00
  3.95365081e-34   1.00000000e+00   1.16309332e-11   0.00000000e+00
  5.20279699e-38   0.00000000e+00]
[  3.01065546e-22   3.79994231e-11   3.48180471e-08   1.23861001e-14
  4.11970850e-31   1.00000000e+00   4.88898765e-25   0.00000000e+00
  4.25802429e-18   0.00000000e+00]

(... and so on)

有关如何解决此特定问题的任何建议吗? 有什么建议吗? (作为一个新手,我可能以错误的方式做了很多事情)

找到答案:我将数据编码为“频道优先”,但将其视为“频道最后”。 通过卷积,这会导致指定的结果,即批处理中的所有项目都具有相同的标签

1 个答案:

答案 0 :(得分:1)

MNIST是一个经典的例子,实际上是官方张量流教程(https://www.tensorflow.org/get_started/mnist/beginners)的一部分。

我认为这里的问题是你没有对数据集进行洗牌,只使用相同的标签对小批量进行训练,你就知道使用批量标准化了。每个小批量的样品也可能具有相同的标签。您应该给出准确度指标来判断您的计划。