【问题标题】:Convert Keras model to TensorFlow protobuf将 Keras 模型转换为 TensorFlow protobuf
【发布时间】:2016-04-04 20:16:07
【问题描述】:

我们目前正在使用 Keras 训练各种神经网络,这是非常理想的,因为它具有良好的界面并且相对易于使用,但我们希望能够将它们应用到我们的生产环境中。

可惜生产环境是C++,所以我们的计划是:

  • 使用 TensorFlow 后端将模型保存到 protobuf
  • 将我们的生产代码链接到 TensorFlow,然后加载到 protobuf 中

不幸的是,我不知道如何从 Keras 访问 TensorFlow 保存实用程序,这些实用程序通常保存为 HDF5 和 JSON。如何保存到 protobuf?

【问题讨论】:

  • 对Keras不熟悉,但是如果使用默认图,可以得到protobuf为tf.get_default_graph().as_graph_def()

标签: c++ protocol-buffers tensorflow keras


【解决方案1】:

如果您不需要在要部署到的环境中使用 GPU,您也可以使用我的库,称为 frugally-deep。它在 GitHub 上可用,并在 MIT 许可下发布:https://github.com/Dobiasd/frugally-deep

简洁的深度允许直接在 C++ 中对已经训练好的 Keras 模型运行前向传递,而无需链接到 TensorFlow 或任何其他后端。

【讨论】:

  • 有支持 RNN 的计划吗?与处理 RNN(但不处理卷积)的lwtnn 有有趣的重叠。
  • @Shep 我想在未来支持他们,但我还没有为此计划的时间表。
【解决方案2】:

这似乎在 "Keras as a simplified interface to TensorFlow: tutorial" 中得到了回答,由 Francois Chollet 发布在 Keras 博客 上。

特别是section II, "Using Keras models with TensorFlow"

【讨论】:

    【解决方案3】:

    您可以通过以下方式访问 TensorFlow 后端:

    import keras.backend.tensorflow_backend as K
    

    然后您可以调用任何 TensorFlow 实用程序或函数,例如:

    K.tf.ConfigProto
    

    【讨论】:

      【解决方案4】:

      将您的 keras 模型保存为 HDF5 文件。

      然后您可以使用以下代码进行转换:

      from keras import backend as K
      from tensorflow.python.framework import graph_util
      from tensorflow.python.framework import graph_io
      
      weight_file_path = 'path to your keras model'
      net_model = load_model(weight_file_path)
      sess = K.get_session()
      
      constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), 'name of the output tensor')
      graph_io.write_graph(constant_graph, 'output_folder_path', 'output.pb', as_text=False)
      print('saved the constant graph (ready for inference) at: ', osp.join('output_folder_path', 'output.pb'))
      

      这是我处理多个输入和多个输出情况的示例代码: https://github.com/amir-abdi/keras_to_tensorflow

      【讨论】:

        【解决方案5】:

        确保更改 keras 后端的学习阶段,以存储适当的层值(如 dropout 或批量标准化)。这是关于它的discussion

        【讨论】:

          猜你喜欢
          • 2021-04-08
          • 2018-10-08
          • 2019-05-14
          • 2021-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多