我已经训练了一个使用Python使用Tensorflow实现的网络。最后,我使用tf.train.Saver()保存了模型。现在,我想使用C ++通过这个经过预先训练的网络进行预测。
我怎样才能做到这一点 ?有没有一种方法可以转换检查点,以便可以与tiny-dnn或Tensorflow C ++一起使用?
任何想法都欢迎:)谢谢!
您可能应该以SavedModel格式导出模型,该格式封装了计算图和保存的变量(tf.train.Saver
仅保存变量,因此无论如何都必须保存图)。
然后,您可以使用加载C ++中保存的模型LoadSavedModel
。
确切的调用将取决于模型的输入和输出。但是Python代码看起来像这样:
# You'd adjust the arguments here according to your model
signature = tf.saved_model.signature_def_utils.predict_signature_def(
inputs={'image': input_tensor}, outputs={'scores': output_tensor})
builder = tf.saved_model.builder.SavedModelBuilder('/tmp/my_saved_model')
builder.add_meta_graph_and_variables(
sess=sess,
tags=[tf.saved_model.tag_constants.SERVING],
signature_def_map={
tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
signature
})
builder.save()
然后在C ++中,您将执行以下操作:
tensorflow::SavedModelBundle model;
auto status = tensorflow::LoadSavedModel(session_options, run_options, "/tmp/my_saved_model", {tensorflow::kSavedModelTagServe}, &model);
if (!status.ok()) {
std::cerr << "Failed: " << status;
return;
}
// At this point you can use model.session
(请注意,使用SavedModel格式还将允许您使用TensorFlow Serving服务模型,如果这对您的应用程序有意义)
希望能有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句