当前位置: 首页 > 面试题库 >

Keras + Tensorflow和Python中的多处理

金泉
2023-03-14
问题内容

我正在使用Keras与Tensorflow作为后端。

我正在尝试在主流程中保存模型,然后model.predict在另一个流程中加载/运行(即调用)。

我目前正在尝试从文档中使用天真的方法来保存/加载模型:https : //keras.io/getting-started/faq/#how-can-i-save-a-
keras-model

所以基本上:

  1. model.save() 在主要过程中
  2. model = load_model() 在子进程中
  3. model.predict() 在子进程中

但是,它只是挂断load_model电话。

有没有办法实现我的目标?高度赞赏的描述或简短的示例将不胜感激。

注意:我已经尝试过将图形传递给流程的方法,但是失败了,因为看来tensorflow图是不可选的。如果确实有一种方法可以将tensorflow图/模型传递给子进程,那么我也对此持开放态度。

谢谢!


问题答案:

根据我的经验,问题在于加载Keras到一个进程中,然后在将keras其加载到您的主环境中时生成一个新进程。但是对于某些应用程序(例如训练Keras模型的混合),最好将所有这些都集中在一个过程中。所以我建议采取以下方法(有点麻烦-但为我工作):

  1. 不要将KERAS加载到您的主要环境中 。如果要加载Keras / Theano / TensorFlow,请仅在功能环境中加载。例如 要这样做:
        import keras

     def training_function(...):
        ...

但请执行以下操作:

        def training_function(...):
        import keras
        ...
  1. 在单独的过程中运行与每个模型相关的工作: 我通常会创建正在完成工作的工作人员(例如培训,调优,评分),然后在单独的过程中运行他们。这样做的 好处是, 在您的进程完成后,该进程使用的全部内存都被完全 释放 。这可以帮助您解决许多内存问题,这些问题通常是在使用多处理甚至在一个进程中运行多个模型时遇到的。所以这看起来像这样:
        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()

不同的方法只是为不同的模型动作准备不同的脚本。但这可能会导致内存错误,尤其是在模型消耗内存的情况下。 请注意
,由于这个原因,最好使您的执行严格按顺序执行。



 类似资料:
  • Keras是紧凑,易于学习的高级Python库,运行在TensorFlow框架之上。它的重点是理解深度学习技术,例如为神经网络创建维护形状和数学细节概念的层。freamework的创建可以是以下两种类型 - 顺序API 功能API 在Keras中创建深度学习模型有以下 8 个步骤 - 加载数据 预处理加载的数据 模型的定义 编译模型 指定模型 评估模型 进行必要的预测 保存模型 下面将使用Jupy

  • 我有一个简单的模型,我已经训练过了,它似乎运行良好,现在我想使用tensorflow服务,我需要SavedModel。 但是我看不到一种方法来指定用simple_save()输入数据所要做的任何预处理 但是我找不到如何用saved_model.simple_save()实现这一点的例子

  • 问题内容: 这个问题可能已经有人提出过,而且回答的可能性更大,但是我不知道在哪里可以找到它。 问题:我有一个用于pythonflask的路由器,该路由器需要花费一些时间来处理每个调用的数据。我需要使对路由的每个调用本身就是一个线程,因此它不必等待请求被加载。 问题答案: Flask带有内置的开发Web服务器,但是你不应该在生产环境中使用它。 为了获得一些很酷的功能,例如为每个请求和静态文件服务提供

  • 问题内容: 如何在没有多线程的情况下在python中运行多个进程?例如考虑以下问题: 我们必须制作一个Gui,它具有一个启动一个函数的开始按钮(例如,打印所有整数),还有一个停止按钮,以便单击该按钮可以停止该函数。 如何在Tkinter中做到这一点? 问题答案: 然后,您需要将小部件与启动工作线程的函数绑定在一起。例如: 通过这种方法,您只能通过更改其值来优雅地结束线程。注意,使用多个线程可避免在

  • 请注意,CPU没有被利用,任务管理器上的任何其他内容都表明任何东西都没有被充分利用。我没有以太网连接,并且连接到Wifi(我不认为这会影响任何事情,但我不确定Jupyter是否会影响Wifi,因为它是通过web浏览器运行的)。我正在培训大量数据(~128GB),这些数据都加载到RAM(512GB)中。我运行的模型是一个完全卷积的神经网络(基本上是一个U型网络结构),具有566290个可训练参数。到

  • 这就是Keras Keras是一个高层神经网络库,Keras由纯Python编写而成并基Tensorflow或Theano。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性) 支持CNN和RNN,或二者的结合 支持任意的链接方案(包括多输入和多输出训练) 无缝CPU和GPU切换