【问题标题】:Deep neural network: could a random batch size be useful for training?深度神经网络:随机批量大小对训练有用吗?
【发布时间】:2017-12-27 16:07:13
【问题描述】:

我与 Keras 合作了大约三个月,现在我想知道训练不同(随机)大小(16、32、64、128)的批次是否有用,以结合不同批次大小的好处.

我没有找到任何可以回答这个问题的文档。我完全错了吗?

【问题讨论】:

  • 您可能想研究引导程序。
  • 我已经写了一个类来训练bagging / boosting

标签: tensorflow machine-learning deep-learning keras


【解决方案1】:

我见过两种最流行的批量处理策略:

  • 选择尽可能大的模型,以便模型仍然适合 GPU 内存。由于并行性和矢量化,这样做主要是为了加快训练速度。

  • 调整批量大小,就像任何其他超参数一样,通过随机搜索或通过Bayesian Optimization。令人惊讶的是,更大的批量并不总是意味着更好的模型性能(尽管在许多情况下确实如此)。关于这个问题,请参阅this discussion:主要思想是训练中的额外噪声可能有利于泛化。请记住,L2 正则化相当于将高斯噪声添加到x。减少批量大小也会增加训练过程的噪音,尤其是在您使用批量规范时。

我不知道在训练期间为 same 模型更改批量大小的任何工作。但是为不同模型选择随机批量大小肯定会有好处。

警告:在某些设置中,例如,在深度强化学习中,额外的噪音实际上会损害性能,因此如果减少批量大小可能不是一个好主意。因此,一如既往,这在很大程度上取决于您的问题。

【讨论】:

  • 谢谢你。有没有一种简单的方法可以使用流行的框架来计算您的 GPU 上可以容纳多少张图片?
  • 这取决于网络,因为它需要内存来存储变量、梯度等。一般来说,对于 CIFAR-10 图像,即 32x32x3,最大批量大小约为 500-1000。
【解决方案2】:

我不确定我的答案是否完全符合您的要求。原则上,为了在训练期间获得随机批量大小,您可以做的就是在循环中进行拟合。也就是说,在每个循环步骤中,您保存模型权重,然后将其加载到模型中,更改批量大小,编译并再次拟合。可能可以实现一个回调类来在内部执行此操作,而不需要循环。

虽然我认为这不是您想要的,因为一旦网络超过完整样本,批量大小就会发生变化。但是,作为之前的答案,到目前为止,我们还没有一个选项可以在每个时期都这样做(原则上它可以实现)。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 2021-02-11
    • 2017-10-12
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多