Tensorflow下对RNN中Batch-size的测试和理解

来源:互联网 发布:云计算是什么意思啊 编辑:程序博客网 时间:2024/06/16 01:49

这篇笔记是基于tensorflow1.4版本,小白级别。代码是在网上下载的一个做mnist手写数字分类的LSTM,修改了两个小地方。

    x = tf.split(x, n_steps, 0)    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=pred))

- Batch-size

增大 Batch_Size 有何好处?
内存利用率提高了,大矩阵乘法的并行化效率提高。跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大 Batch_Size 有何坏处?
内存利用率提高了,但是内存容量可能撑不住了。跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

这是一个损失函数局部优有“多坑人”和局部优“数目太多好难选”之间的竞争,竞争平衡点才是你最终的训练值。故此,最终的训练值是一个分布,大伙们一般取平均来证明自己的模型多牛逼。
物理上,就是能量(坑好深)和熵(选择多)的竞争结果,而且复杂系统中,能量和熵一辈子都在竞争,讨论自由能最小值在非凸问题上的意义,比直接讨论损失函数的最小值更有意义。

测试了一下不同大小的batch_size对收敛速度的影响,也不一定准确,尤其是批处理数量较大的时候,前两三次梯度方向的选择对收敛速度至关重要,但是批处理数据又是随机选择的,下面的表格可以作为大致参考

Batch-size Iter tims when accuracy > 0.99 64 750 128 350 256 650 512 700 1024 700 2056 大于1000