您的位置:首页 > 其它

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

2017-11-15 11:57 190 查看
这篇笔记是基于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-sizeIter tims when accuracy > 0.99
64750
128350
256650
512700
1024700
2056大于1000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tensorflow batch-size