batch_size和运行时间之间的关系

时间:2019-09-06 09:28:21

标签: python keras

以前,我认为较小的batch_size将导致更快的训练,但是在喀拉拉邦的实践中,我收到相反的结果,即较大的batch_size使训练更快。

我正在实现一个示例代码,并且通过增加batch_size的数量,训练变得更快。这与我以前的普遍看法相反(较小的batch_size可加快训练速度), 这是示例代码:

# fit model
import time
start = time.time()
history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=1000,
batch_size= 500 , verbose=0)
end = time.time()

elapsed = end - start
print(elapsed)

我分别将500、250、50和10设置为batch_size,我希望较低的batch_size将具有更快的训练速度,但是batch_size 500的结果为6.3秒, 250个结果需要6.7秒,50个结果需要28.0sec,10个结果需要140.2secc !!!

2 个答案:

答案 0 :(得分:0)

这很有道理。我不知道您使用的是哪种模型,但是Keras经过高度优化,充分利用了矢量化技术进行快速矩阵运算。因此,如果将5000个样本的数据拆分为500个批次(具有1000个纪元),则该模型实际上会有(5000/500)x 1000次迭代。那是一万 现在,如果您以10的批量大小执行此操作,则将有(5000/10)x 1000次迭代。那是50万。模型向前和向后都有更多迭代。

希望有帮助。

答案 1 :(得分:0)

对于硬件,GPU非常擅长并行计算,特别是矩阵运算发生在向前和向后传播中。同样的事情发生在软件方面,tensorflow和其他DL库优化了矩阵运算。

因此,较大的批处理大小使GPU和DL库能够“优化更多矩阵计算”,从而缩短了训练时间。