【TensorFlow源碼系列】【零】使用TensorFlow C++ 接口進行模型推理 原

#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;
}

後續源碼分析,會基於這個主體流程作分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章