#include <string> #include <vector> #include <iostream> #include "tensorflow/core/public/session.h" #include "tensorflow/core/framework/tensor.h" //using namespace std; //using namespace tensorflow; int main(int argc,char **argv) { // 1. 建立session Session * session; Status status = NewSession(SessionOptions(),&session); // 2. 模型路徑 string model_path = "mnist.pb"; // 3. 將pb原始模型導入到GraphDef中 GraphDef graphdef; status = ReadBinaryProto(Env::Default(),model_path,&graphdef); if(!status.ok()){ return 0; } // 4. 將原始模型加載到session中 status = session->Create(graphdef); if(!status.ok()){ return 0; } // 5. 建立輸入輸出tensor std::vector<std::pair<std::string,tensorflow::Tensor>> inputs; std::vector<tensorflow::Tensor> outputs; tensorflow::Tensor input_tensor(DT_FLOAT,tensorflow::TesorShape({1,28,28,1})); // 6. 獲取輸入tensor指針,向裏面填寫數據 auto plane_tensor = input_tensor.tensor<float,4>(); for(int n = 0; n < 1; ++n) for(int h = 0 ; h < 28; ++h) for(int w = 0; w < 28; ++w) for(int c = 0; c < 1; ++c){ plane_tensor(n,h,w,c) = 1.0f; } inputs.push_back({"inputs",input_tensor}); // 7. 運行模型,須要傳遞輸入tensor,輸出tensor,輸出tensor的name ---softmax status = session->Run(inputs,{"softmax"},{},&outputs); if(!status.ok()){ return 0; } // 8. 計算完成後,將計算結果從outputtensor中取出來 auto out_tensor = out_tensor[0].tensor<float,2>(); for(int n = 0; n < 1; ++n) for(int h = 0 ; h < 10; ++h){ std::cout<<out_tensor(n,h)<<std::endl; } return 0; }
後續源碼分析,會基於這個主體流程做分析。ios