各种教学视频或文档资料 +QQ:635992897
ssd_pascal.py
# Divide the mini-batch to different GPUs.
batch_size = 32
accum_batch_size = 32
iter_size = accum_batch_size / batch_size
solver_mode = P.Solver.CPU
device_id = 0
batch_size_per_device = batch_size
if num_gpus > 0:
batch_size_per_device = int(math.ceil(float(batch_size) / num_gpus))
iter_size = int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus)))
solver_mode = P.Solver.GPU
device_id = int(gpulist[0])
说明
- batch_size:训练时每次进入网络的图片数
- iter_size:训练时对进入网络的图片需要迭代的次数
- accum_batch_size:batch_size和iter_size的乘积
- test_batch_size : 测试时每次进入网络的图片数
- test_iter_size : 测试时对进入网络的图片需要迭代的次数
- test_interval : 训练迭代多少次后会进行一次测试
在运算资源有限的情况下,可以通过改变batch_size和iter_size降低计算资源。要注意的一点是在使用多张显卡跑网络的时候,每张显卡都是并行运行的,还是一个batch_size的图片输入,所以并不会使缓存降下来,但它在理论上是可以将运行的时间成显卡数量的倍数缩短。
例如
在ssd_pascal.py中,每次进入网络的图片为32张,训练时需要对这32张图片迭代1次。然而我们在实际的操作中用一张NV TITAN会”out of memory”,所以我们将batch_size改为4,iter_size改成4,相当于每次进入网络4张图片,训练时需要对这4张图片迭代4次,然后对迭代的结果取平均值,理论上来说就相当于batch_size为16,所以在原来的配置中跑完这个网络总共需要迭代120000次,而为了达到这个效果我们需要增加到240000次。虽说这样理论上可以达到同样的效果,但是实际中还是会有细小的差别。