我可以在Keras中逐步训练模型吗?

时间:2017-05-28 23:46:38

标签: python memory-management tensorflow keras theano

我在Keras有一个我需要训练的模型,但这个模型总是炸掉我的8GB内存并冻结我的电脑。

我已经达到了培训的极限,只有一个样品(批量大小= 1)并且仍然会爆炸。

  

请假设我的模型没有错误或错误,这个问题不是关于"我的模型有什么问题"。 (是的,较小的模型使用相同的数据可以正常工作,但对于任务来说还不够好)。

如何将模型分成两部分并分别训练每个部分,但是在它们之间传播渐变?

有可能吗? (使用theano或tensorflow没有限制)

仅使用CPU,无GPU。

1 个答案:

答案 0 :(得分:1)

您可以执行此操作,但是这会使您的训练时间接近于只能使结果对后代有用的大小。

让我们考虑一下,当我们以1的批量大小进行训练时,我们在内存中拥有什么(假设您只将一个样本读入了内存):

1)采样

2)模型的权重

3)#您的模型的每个层的激活都存储了这些信息以进行反向传播

这些东西都不需要培训。但是,从理论上讲,您可以对模型的前半部分进行正向传递,将权重和激活信息转储到磁盘上,加载模型的后半部分,对它进行正向传递,然后对它进行向后传递,转储将这些权重和激活信息加载到磁盘上,重新加载前半部分的权重和激活信息,然后完成向后传递。这个过程甚至可以拆分成每次做一层。

OTOH,这类似于交换空间的功能,而无需考虑它。如果您想要一个稍微不那么优化的版本(此时,优化显然尚无定论),您可以将交换空间增加到500GB并每天调用它。