TensorFlow网络没有培训?

时间:2016-01-19 20:45:15

标签: python neural-network deep-learning tensorflow conv-neural-network

在最后几天,我和TensorFlow度过了一段非常奇怪的时光,无法想象atm会出现什么问题。

我建立了这个网络:link。它是TensorFlow的MNIST示例的副本。

基本上,我所做的就是改变网络,从28x28x1图像(MNIST灰度)到600x800x1图像(我自己拍摄的一些图像,背景相对干净的网络摄像头和不同位置的一个对象)。

我想要做的就是玩这样的CNN并让它输出图像中对象的x位置。所以单个输出神经元。

但是,无论我尝试什么,网络总是输出1.0。甚至(当你在代码末尾看我的测试部分时)我把所有的,全部为0或所有随机数输入网络。

当然,由于我只有21个标记的训练和7个标记的测试图片,我预计性能非常糟糕(因为800x600像素图像对于神经网络而言非常大并且定位对象并不容易)。

...但我完全不知道为什么网络总是输出1.0,即使它是无意义的。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

查看源代码,似乎在softmax(the code you shared中的L.104)之前的最终完全连接层将每个示例缩小为单输出类,然后再计算SOFTMAX。由于每个示例只有一个类,tf.nn.softmax() op(y_conv)的结果将是每个元素中包含1.0的batch_size x 1矩阵,并且tf.argmax()每个元素包含0,因为只有一个值。类似地,将tf.argmax()应用于y_train(这是一个batch_size x 1矩阵)将为每个元素产生0,因此“准确度”将为100%。

要解决此问题,您应该(i)将最终完全连接层的输出单元数增加为类数,(ii)将每行y_train编码为单热矢量代表每个例子的真实类。