【问题标题】:Can I train a model in steps in Keras?我可以在 Keras 中逐步训练模型吗?
【发布时间】:2017-05-28 23:46:37
【问题描述】:

我在 Keras 中有一个模型需要训练,但这个模型总是会炸毁我的 8GB 小内存并冻结我的计算机。

我已经达到了只训练一个样本(批量大小 = 1)的极限,但它仍然爆炸了。

请假设我的模型没有错误或错误,这个问题不是关于“我的模型有什么问题”。 (是的,较小的模型可以处理相同的数据,但不足以完成任务)。

如何将我的模型一分为二并分别训练每个部分,但在它们之间传播梯度?

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

仅使用 CPU,不使用 GPU。

【问题讨论】:

  • 你可以试试云计算来加速。这是我编写的一个模块,如果您有兴趣走这条路,可以轻松地在 AWS 上运行项目。 github.com/losDaniel/spot-connect

标签: python memory-management tensorflow keras theano


【解决方案1】:

你可以做这件事,但它会导致你的训练时间接近只会使结果对后代有用的大小。

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

1) 那个样本

2) 模型的权重

3)每一层的激活#你的模型存储这些用于反向传播

这些东西都不是训练所必需的。但是,理论上,您可以对模型的前半部分进行前向传递,将权重和激活转储到磁盘,加载模型的后半部分,对其进行前向传递,然后对其进行后向传递,转储这些权重和激活到磁盘,加载前半部分的权重和激活,然后完成反向传递。这个过程可以进一步拆分到一次只做一层。

OTOH,这类似于交换空间的作用,无需您考虑。如果您想要一个稍微不那么优化的版本(此时优化显然没有意义),您可以将交换空间增加到 500GB,然后收工。

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 2017-07-07
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多