【发布时间】:2017-07-02 05:57:51
【问题描述】:
实施卷积神经网络进行图像分类,我的训练集准确率(98%)取得了不错的结果,但测试集准确率仍然很低(大约 82%)。我面临一个过度拟合的问题。 我试图通过实现一个 dropout 函数(保留 50% 的神经元)来解决它,但事实证明,这个解决方案让我的训练准确率下降到了 80%!这是否意味着我的 CNN 中应该有更多的神经元? 我可以做些什么来防止这个问题?
我正在使用 Tensorflow 库,这是训练循环的一段代码:(我不确定我是否正确实现了它)
for epoch in range(22000):
permutation=np.random.permutation(19600)
permutation=permutation[0:200]
batch=[train_set[permutation],train_label[permutation]]
summary,model,cost=sess.run([merged,train_step,cross_entropy],feed_dict={X:batch[0],Yreal:batch[1],drop_value:0.5}) #training with 50% of the neurons
train_writer.add_summary(summary,epoch)
print(cost)
if epoch%500==0:
print(epoch)
summary=sess.run(merged,feed_dict={X:test_set[0:300],Yreal:test_label[0:300],drop_value:1}) #evaluating testing set accuracy using 100% of the neurons
test_writer.add_summary(summary,epoch)
【问题讨论】:
-
dropout 是不是应该让你的训练准确率下降?毕竟,dropout 意味着你正在使用更小、更不强大的网络进行训练。是什么让你说有问题?
-
其实你是对的,我不是这么想的。但是如果我想获得好的测试准确率,我必须保持我的训练准确率,对吗?有没有办法在良好的训练准确性和良好的泛化之间取得平衡?我的第一个想法是训练一个功能强大的网络……不确定它是否可以工作。我会在这里尝试并反馈。
-
在这里回答可能会有所帮助:stackoverflow.com/questions/44695141/…
标签: python-3.x tensorflow conv-neural-network