问题

网络训练收敛速度慢

主要原因

模型的问题,训练迭代时含大量参数

最佳解决办法

优化算法模型

有技巧的解决办法

网络模型的优化,通常是比较难的。但可以通过其他方式来加速收敛速度

  1. 增大学习率
  2. 减小迭代次数
  3. **在迭代次数不变的情况下,去调节batch_size和epoch间比例
  4. **微调SGD参数,动量、学习率
  5. 及时释放不必要的内存开销,中间变量及时释放
  6. 简化程序代码,例如 改掉for循环,用switch等简单程序替代循环

例如:
同等设备同等情况下

在epoch=20000 batch_size=64 学习率Ir=0.1 时
迭代次数为20000*(训练images/64) 一次epoch需要 6min
程序总耗时 20000 * 6min=83.4 days

保持迭代次数和学习率不变, batch_size=5 时
则epoch=1563(迭代次数为1563*训练images/5) 一次epoch需要 13min
程序总耗时 1563 * 13min = 14.1 days

当epoch=1563 batch_size=5 学习率Ir=0.15 时
一次epoch需要 7 min
程序总耗时 1563 * 7min=7.6 days

当epoch=1563 batch_size=5 学习率Ir=0.15 边运行边释放中间变量数组内存 时
一次epoch需要 6 min 30s
程序总耗时 1563 * 6min30s=7 days

当epoch=1400 batch_size=5 学习率Ir=0.15 边运行边释放数组内存 时
程序总耗时 1400 * 6min30s=6.3 days

当epoch=1400 batch_size=5 学习率Ir=0.15 边运行边释放中间变量数组内存 简化程序 时
一次epoch需要 6 min 10s
程序总耗时 1400 * 6min10s=6 days

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐