TensorFlow CNN在分割批次时表现不同

时间:2016-06-27 01:20:00

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

最初我让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%。

1 个答案:

答案 0 :(得分:2)

Gradient Descent切换到Stochastic Gradient Descent,您需要记住一些事项。

  1. 批量大小会对神经网络的最终性能产生影响。我会尝试128或256。

      

    典型的小批量大小为256,但小批量的最佳大小可能因不同的应用和架构而异。

  2. 您希望使用较小的学习率,并尝试将学习率降低。

      

    学习率α通常远小于批量梯度下降中的相应学习率,因为更新中存在更多差异。

  3. 您应该在每个时期随机化您的训练数据。

      

    如果数据以某种有意义的顺序给出,这会使梯度偏差并导致收敛不良。

  4. 所有报价均来自this article.。值得进一步研究梯度下降与随机梯度下降之间的差异。