根据我的经验,问题在于加载
Keras到一个进程中,然后在将
keras其加载到您的主环境中时生成一个新进程。但是对于某些应用程序(例如训练
Keras模型的混合),最好将所有这些都集中在一个过程中。所以我建议采取以下方法(有点麻烦-但为我工作):
- 不要将KERAS加载到您的主要环境中 。如果要加载Keras / Theano / TensorFlow,请仅在功能环境中加载。例如 不 要这样做:
import keras def training_function(...): ...
但请执行以下操作:
def training_function(...): import keras ...
- 在单独的过程中运行与每个模型相关的工作: 我通常会创建正在完成工作的工作人员(例如培训,调优,评分),然后在单独的过程中运行他们。这样做的 好处是, 在您的进程完成后,该进程使用的全部内存都被完全 释放 。这可以帮助您解决许多内存问题,这些问题通常是在使用多处理甚至在一个进程中运行多个模型时遇到的。所以这看起来像这样:
def _training_worker(train_params): import keras model = obtain_model(train_params) model.fit(train_params) send_message_to_main_process(...) def train_new_model(train_params): training_process = multiprocessing.Process(target=_training_worker, args = train_params) training_process.start() get_message_from_training_process(...) training_process.join()
不同的方法只是为不同的模型动作准备不同的脚本。但这可能会导致内存错误,尤其是在模型消耗内存的情况下。 请注意
,由于这个原因,最好使您的执行严格按顺序执行。



