最近刚刚接触深度学习,由于项目涉及到一些移动端开发的问题,也听了一些朋友的建议,最后决定选择tensorflow作为研究深度学习的平台。这两天照着tflearn官网的VGGNet的demo,用tensorflow实现了VGGNet,然而在用17flowers训练集进行训练的时候,发现不管迭代多少次,准确率和loss函数始终维持在相对不变的值,也就是网络不收敛。一开始很懵逼,毕竟是照着官网的demo做的,怎么会出现这种情况?首先想到的办法就是将中间值打出来,比如:
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5})
print("Loss:", sess.run(cross_entropy,feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5}))
print(cross_entropy)
if i % 50 == 0:
print(compute_accuracy(
mnist.test.images, mnist.test.labels))
Loss是互熵损失的输出值,但结果显示它的值是Nan。于是追根溯源,又打出了Weights和bias的值,发现一样也是Nan。然后我就去google这个问题,发现其实还是有不少人遇到了这个问题的。在stackoverflow上,其中一个人的解释是这样的: