python - 我可以在 Keras 中分步训练模型吗?

标签 python memory-management tensorflow keras theano

我需要在 Keras 中训练一个模型,但这个模型总是会耗尽我小小的 8GB 内存并卡住我的计算机。

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

Please assume my model has no mistakes or bugs and this question is not about "what is wrong with my model". (Yes, smaller models work ok with the same data, but aren't good enough for the task).

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

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

仅使用 CPU,不使用 GPU。

最佳答案

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

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

1) 该样本

2)模型的权重

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

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

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

关于python - 我可以在 Keras 中分步训练模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233042/

相关文章:

python - 过滤 pandas,其中某些列包含列表中的任何单词

c - 如何释放邻接链表分配的内存?

c++ - 对宽寄存器(特别是 Xeon Phi)进行未对齐数据访问的矢量化/优化循环

linux - 在 Linux 中确定 'Free' 内存

python - 安装 Pygame 后 pygame.init() 显示为 undefined variable

python - 与引用列表比较以转换为二进制编码

python - 错误: trying to redefine a primary key as non-primary key

python - Keras/Tensorflow 预测 : error in array shape

python - 文件 “test_hdfs.py”,save_path = saver.save(sess,hdfs_path +“save_net.ckpt”) “Parent directory of {} doesn'存在,无法保存。”。format(save_path))

tensorflow - LSTM:Python 3.7.4 的 Keras