在keras中使用train_on_batch()有什么用?

Dha*_*rma 24 machine-learning deep-learning keras

train_on_batch()与fit()有何不同?我们应该使用train_on_batch()的情况是什么?

ely*_*ely 31

我相信你的意思是fit_generatorfit_generator(以及类似的train_on_batch)进行比较,因为train_on_batch它不是Keras常用的API函数.

对于这个问题,这是主要作者的一个简单答案:

使用fit_generator,您也可以使用生成器来获取验证数据.一般来说,我建议使用fit_generator,但使用train_on_batch也可以.这些方法仅为了方便起见而存在于不同的用例中,没有"正确"的方法.

fit允许您根据您提供的样品集合明确更新重量,而不考虑任何固定的批量大小.如果你想要的话,你可以使用它:训练一个明确的样本集合.您可以使用该方法在传统训练集的多个批次上维护您自己的迭代,但允许fit_generatortrain_on_batch为您批量迭代可能更简单.

可能很好用的一种情况train_on_batch是在一批新样品上更新预先训练的模型.假设您已经训练并部署了一个模型,之后您又收到了一组以前从未使用过的新训练样本.您可以使用train_on_batch仅在这些样本上直接更新现有模型.其他方法也可以这样做,但fit在这种情况下使用它是相当明确的.

除了这样的特殊情况(要么你有一些教学理由在不同的培训批次中保持自己的光标,或者对于特殊批次的某种类型的半在线培训更新),最好总是使用fit_generator(适用于内存中的数据)或fit_generator(用于将批量数据作为生成器进行流式传输).


Big*_*dMe 12

train_on_batch()例如,当使用有状态LSTM并model.reset_states()需要控制对LSTM的调用时,可以更好地控制LSTM的状态。您可能具有多系列数据,并且需要在每个系列之后重设状态,您可以使用来做train_on_batch(),但是如果您使用过,.fit()那么网络将接受所有系列数据的训练,而无需重设状态。没有对与错,这取决于您所使用的数据以及网络的运行方式。

  • 恰好是我的用例,我正在搜索问题,以查看以这种方式进行操作是否有意义,因为我曾经有一段时间尝试用`fit`强制执行。 (2认同)