Python TensorFlow示例,但带有中间层

Python TensorFlow示例,但带有中间层,python,tensorflow,mnist,Python,Tensorflow,Mnist,我正在努力让这个代码正常工作。它可能看起来不像,但它主要来自TensorFlow mnist示例。我试图得到三层,虽然,我已经改变了输入和输出的大小。输入大小为12,中间大小为6,输出大小为2。这就是我运行这个时发生的情况。它不会抛出错误,但是当我运行测试选项时,我总是得到50%。当我重新开始训练时,它会跑,我确信重量在变化。这里有保存模型和重量的代码,所以我很有信心它不会在每次我重新启动时就抹掉我的重量。self.d_y_out背后的想法是有一些东西可以让我运行模型并只为一个图像获取输出。我认

我正在努力让这个代码正常工作。它可能看起来不像,但它主要来自TensorFlow mnist示例。我试图得到三层,虽然,我已经改变了输入和输出的大小。输入大小为12,中间大小为6,输出大小为2。这就是我运行这个时发生的情况。它不会抛出错误,但是当我运行测试选项时,我总是得到50%。当我重新开始训练时,它会跑,我确信重量在变化。这里有保存模型和重量的代码,所以我很有信心它不会在每次我重新启动时就抹掉我的重量。self.d_y_out背后的想法是有一些东西可以让我运行模型并只为一个图像获取输出。我认为问题就在“问题??”的评论附近


编辑我已经编辑了这个问题中的代码。非常感谢vijay m让我走了这么远。任何帮助都将不胜感激。谢谢。

此代码中的问题是您在输入上调用了
辍学。您的网络是单层网络,不需要退出。并使用像Adam这样的动量优化器进行更快的训练。我所做的改变是:

d_y_logits_1 = tf.matmul(d_x, d_W_1) + d_b_1
d_y_mid = tf.nn.relu(d_y_logits_1) 

d_y_logits_2 = tf.matmul(d_y_mid, d_W_2) + d_b_2

d_y_softmax = tf.nn.softmax_cross_entropy_with_logits(logits=d_y_logits_2, labels=d_y_)

d_cross_entropy = tf.reduce_mean(d_y_softmax)

d_train_step = tf.train.AdamOptimizer(0.01).minimize(d_cross_entropy) 

你对你的损失有什么看法?
d_交叉_熵_2
是否在每个训练步骤中减少?。代码中的问题似乎是学习率太高。将梯度下降学习速率从2更改为较低的数字,例如0.01。仅使用一个历元的一部分,且速率设置为0.01,测试值不会从0.5更改。然而,一个完整的纪元可能需要一个小时。我如何检查
d_交叉熵_2
并打印值以检查它是否总是在减少?使用:cost,sess.run([self.d_交叉熵_2,self.d_train_step],feed_dict={self.d_x:batch_xs,self.d_y_:batch_ys})获取成本,确定。我得到了一些学习率设置为0.1的结果,我还按照您的指示打印了成本。我应该按照这个速率去做,还是应该尝试0.01,即使我的结果不那么明显?看看成本,如果它降低得很慢,你可以增加一点,但是如果它振荡,你可以降低它。只要你的验证损失减少,你就应该训练更长的时间。这有一些问题,因为我的输出仍然得到0.5,不管我做了多少训练。self.d_y_out的输出总是一个列表。谢谢你到目前为止的帮助。我得到了>0.9的准确度,我不知道。我的训练集是肤色。1代表皮肤,0代表其他东西。(在本例中,只是图片的其他部分)。我有很多照片是这样设置的。我有一个单层NN,它很好地捕捉到了色差。这也应该奏效。我想我的测试代码中有一个错误。培训期间的损失值是多少,从什么开始,以什么结束?大约从0.7开始,大约在0.6931结束
d_y_logits_1 = tf.matmul(d_x, d_W_1) + d_b_1
d_y_mid = tf.nn.relu(d_y_logits_1) 

d_y_logits_2 = tf.matmul(d_y_mid, d_W_2) + d_b_2

d_y_softmax = tf.nn.softmax_cross_entropy_with_logits(logits=d_y_logits_2, labels=d_y_)

d_cross_entropy = tf.reduce_mean(d_y_softmax)

d_train_step = tf.train.AdamOptimizer(0.01).minimize(d_cross_entropy)