用c++加载tensorflow 模型

首先要下载tensorflow c++的动态链接库,强烈建议不要去手动编译tensorflow的c接口,版本太难对应了,很多坑。

1.下载tensorflow c++的动态链接库

按照这个博客
https://blog.csdn.net/rong_toa/article/details/88857364
下载安装就行了
简单就是

wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.12.0.tar.gz

不同的版本只有改下数字就行了
解压后到/home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0

2.运行

在CmakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Tensorflow_test)

set(CMAKE_CXX_STANDARD 11)

include_directories(
    /home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0/include
    )

add_executable(Tensorflow_test main.cpp)

target_link_libraries(Tensorflow_test
    /home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0/lib/libtensorflow_framework.so
    /home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0/lib/libtensorflow.so
    )

main.cpp

#include <iostream>
#include <tensorflow/c/c_api.h>

int main() {
   std:: cout << "Hello from TensorFlow C library version" << TF_Version();
    return 0;
}

再来个高级点的创建会话
CmakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Tensorflow_test)

#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -D_GLIBCXX_USE_CXX11_ABI=0")

include_directories(
    /home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0/include
    /home/qian/anaconda3/lib/python3.6/site-packages/tensorflow/include/

    )

add_executable(Tensorflow_test main.cpp)

target_link_libraries(Tensorflow_test
    /home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0/lib/libtensorflow_framework.so
    /home/qian/ProgramFiles/libtensorflow-gpu-linux-x86_64-1.12.0/lib/libtensorflow.so
    )

注意加-D_GLIBCXX_USE_CXX11_ABI=0
否则会报
undefined reference to `tensorflow::internal::CheckOpMessageBuilder::NewString
错误

main.cpp

#include <tensorflow/core/platform/env.h>
#include <tensorflow/core/public/session.h>
#include <iostream>

using namespace std;
using namespace tensorflow;

int main()
{
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }
    cout << "Session successfully created.\n";
    return 0;
}

出现
No session factory registered for the given session options: {target: “” config: } Registered factor
解决
https://github.com/tensorflow/tensorflow/issues/3308
https://github.com/tradr-project/tensorflow_ros_cpp/issues/9

感觉又要重新编译,真是坑!
解决方案!!!!!!在stackoverflow有各种方法
https://stackoverflow.com/questions/33620794/how-to-build-and-use-google-tensorflow-c-api
方法1.
编译太麻烦,用人家打包好的api吧
https://github.com/serizba/cppflow
下载,安装其接口调用!
方法2
直接下载人家编译好的
https://github.com/kecsap/tensorflow_cpp_packaging/releases
方法3
bazel编译不好用,用cmake编译
https://github.com/FloopCZ/tensorflow_cc

方法4
自己编译!!!好坑

3.tensorflow c++接口实现mnist手写数字识别

不重新编译直接用github上的人家打包好的api吧
https://github.com/serizba/cppflow

git clone git@github.com:serizba/cppflow.git
cd cppflow/examples/load_model
mkdir build
cd build
cmake ..
make
./example

编译首先是
cmake版本,改小
cmake_minimum_required(VERSION 2.8)
c++版本
set(CMAKE_CXX_STANDARD 11)
将下载好的libtensorflow放到home目录下,或者修改CmakeLists.txt
最后出现编译错误
在Model.h中加上

namespace std {
    template<class T> struct _Unique_if {
        typedef unique_ptr<T> _Single_object;
    };

    template<class T> struct _Unique_if<T[]> {
        typedef unique_ptr<T[]> _Unknown_bound;
    };

    template<class T, size_t N> struct _Unique_if<T[N]> {
        typedef void _Known_bound;
    };

    template<class T, class... Args>
        typename _Unique_if<T>::_Single_object
        make_unique(Args&&... args) {
            return unique_ptr<T>(new T(std::forward<Args>(args)...));
        }

    template<class T>
        typename _Unique_if<T>::_Unknown_bound
        make_unique(size_t n) {
            typedef typename remove_extent<T>::type U;
            return unique_ptr<T>(new U[n]());
        }

    template<class T, class... Args>
        typename _Unique_if<T>::_Known_bound
        make_unique(Args&&...) = delete;
}

编译成功

参考
https://www.cnblogs.com/jourluohua/p/11947176.html

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要部署 TensorFlow 模型,可以按照以下步骤进行操作: 1. 准备模型:首先,需要训练和保存 TensorFlow 模型。可以使用 TensorFlow 提供的高级 API,如 Keras,或使用原生 TensorFlow API 进行模型训练。在训练完成后,保存模型的权重和结构。 2. 导出模型:将模型导出为 TensorFlow 支持的格式,如 SavedModel 或 TensorFlow 格式(.pb)。这样做可以确保在部署过程可以轻松加载模型。导出模型时,记得保存模型的元数据和签名。 3. 安装 TensorFlow 和相关库:在部署 TensorFlow 模型之前,需要在目标环境安装 TensorFlow 和其他必要的软件库。可以使用 pip 或 conda 进行安装,并确保使用与训练时相同的 TensorFlow 版本。 4. 加载和推理:在部署环境导入 TensorFlow 和相关库,并加载导出的模型。使用输入数据对模型进行推理,并获取输出结果。可以通过 TensorFlow 提供的预测函数直接进行推理,或使用 TensorFlow Serving 等工具进行更高级的模型部署。 5. 部署到服务器或云平台:如果要在服务器或云平台上部署 TensorFlow 模型,可以使用诸如 Docker 和 Kubernetes 的容器化技术。这样可以将模型包装为容器,并提供可扩展的部署解决方案。 6. 性能优化:在部署期间,可以进行一些性能优化以提高模型的推理速度和效率。例如,使用 TensorFlow Lite 将模型转换为适用于移动设备或嵌入式设备的优化版本,或使用 TensorFlow GPU 支持利用 GPU 加速模型推理。 总之,部署 TensorFlow 模型需要准备模型、导出模型、安装所需库、加载和推理模型,并根据实际需求选择合适的部署方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值