最初我让CNN使用以下代码:
for i in range(1000):
x_batch = []
y_batch = []
cost_ = 0.
x_batch = x
y_batch = y_data
sess.run(train_op, feed_dict={X: x_batch, Y: y_batch, p_keep_conv: 0.8, p_keep_hidden: 0.5})
cost_ += (sess.run(cost, feed_dict={X: x_batch, Y: y_batch, p_keep_conv: 0.8, p_keep_hidden: 0.5}))
print(cost_)
然后我意识到我无法使用更大的数据集,因为它会快速使用所有可用的内存。 相反,我重写了如下代码:
for i in range(1000):
x_batch = []
y_batch = []
cost_ = 0.
for i in range(0, len(y_data), 100):
x_batch = x[i:i+100]
y_batch = y_data[i:i+100]
sess.run(train_op, feed_dict={X: x_batch, Y: y_batch, p_keep_conv: 0.8, p_keep_hidden: 0.5})
cost_ += (sess.run(cost, feed_dict={X: x_batch, Y: y_batch, p_keep_conv: 0.8, p_keep_hidden: 0.5}))
print(cost_)
应该将输入分成批次以减少用于视频卡的内存量。问题是,现在它没有达到与以前相同的准确度。 最初的准确率为89%,现在只有33%。
答案 0 :(得分:2)
从Gradient Descent
切换到Stochastic Gradient Descent
,您需要记住一些事项。
批量大小会对神经网络的最终性能产生影响。我会尝试128或256。
典型的小批量大小为256,但小批量的最佳大小可能因不同的应用和架构而异。
您希望使用较小的学习率,并尝试将学习率降低。
学习率α通常远小于批量梯度下降中的相应学习率,因为更新中存在更多差异。
您应该在每个时期随机化您的训练数据。
如果数据以某种有意义的顺序给出,这会使梯度偏差并导致收敛不良。
所有报价均来自this article.。值得进一步研究梯度下降与随机梯度下降之间的差异。