我正在尝试使用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)
有关如何解决此特定问题的任何建议吗? 有什么建议吗? (作为一个新手,我可能以错误的方式做了很多事情)
找到答案:我将数据编码为“频道优先”,但将其视为“频道最后”。 通过卷积,这会导致指定的结果,即批处理中的所有项目都具有相同的标签
答案 0 :(得分:1)
MNIST是一个经典的例子,实际上是官方张量流教程(https://www.tensorflow.org/get_started/mnist/beginners)的一部分。
我认为这里的问题是你没有对数据集进行洗牌,只使用相同的标签对小批量进行训练,你就知道使用批量标准化了。每个小批量的样品也可能具有相同的标签。您应该给出准确度指标来判断您的计划。