我正在使用Keras与Tensorflow作为后端。
我正在尝试在主流程中保存模型,然后model.predict在另一个流程中加载/运行(即调用)。
model.predict
我目前正在尝试从文档中使用天真的方法来保存/加载模型:https : //keras.io/getting-started/faq/#how-can-i-save-a- keras-model。 所以基本上:
model.save()
model = load_model()
model.predict()
但是,它只是挂断load_model电话。
load_model
有没有办法实现我的目标?高度赞赏的描述或简短的示例将不胜感激。
注意:我已经尝试过将图形传递给流程的方法,但是失败了,因为看来tensorflow图是不可选的。如果确实有一种方法可以将tensorflow图/模型传递给子进程,那么我也对此持开放态度。
谢谢!
根据我的经验,问题在于加载Keras到一个进程中,然后在将keras其加载到您的主环境中时生成一个新进程。但是对于某些应用程序(例如训练Keras模型的混合),最好将所有这些都集中在一个过程中。所以我建议采取以下方法(有点麻烦-但为我工作):
Keras
keras
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()
不同的方法只是为不同的模型动作准备不同的脚本。但这可能会导致内存错误,尤其是在模型消耗内存的情况下。 请注意 ,由于这个原因,最好使您的执行严格按顺序执行。