#CMakeLists.txt

cmake_minimum_required (VERSION 2.8.)
project (tf_example) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W") #link_directories(./lib) include_directories(
/home/u/tf1./tensorflow-GPU
/home/u/tf1./tensorflow-GPU/bazel-genfiles
/home/u/tf1./tensorflow-GPU/bazel-bin/tensorflow
/home/u/tf1./tensorflow-GPU/tensorflow/contrib/makefile/downloads/nsync/public
/home/u/tf1./tensorflow-GPU/tensorflow/contrib/makefile/gen/protobuf/include
/usr/local/include/eigen3
/home/u/tf1./tensorflow-GPU/tensorflow/contrib/makefile/downloads/absl
) add_executable(tf_test tf.cpp) #link_directories(./lib)
#target_link_libraries(tf_test tensorflow_cc tensorflow_framework) target_link_libraries(tf_test /home/u/tf1./tensorflow-GPU/bazel-bin/tensorflow/libtensorflow_cc.so. /home/u/tf1./tensorflow-GPU/bazel-bin/tensorflow/libtensorflow_framework.so.)
//tf.cpp

/*
* test tensorflow_cc c++ successfully
* load mnist.pb model successfully
* conference:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/label_image
* */ //@wp conference:https://blog.csdn.net/wd1603926823/article/details/92843830
#include <fstream>
#include <utility>
#include <vector>
#include <Eigen/Core>
#include <Eigen/Dense> #include "tensorflow/cc/ops/const_op.h"
#include "tensorflow/cc/ops/image_ops.h"
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/graph.pb.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/graph/default_device.h"
#include "tensorflow/core/graph/graph_def_builder.h"
#include "tensorflow/core/lib/core/errors.h"
#include "tensorflow/core/lib/core/stringpiece.h"
#include "tensorflow/core/lib/core/threadpool.h"
#include "tensorflow/core/lib/io/path.h"
#include "tensorflow/core/lib/strings/stringprintf.h"
#include "tensorflow/core/platform/env.h"
#include "tensorflow/core/platform/init_main.h"
#include "tensorflow/core/platform/logging.h"
#include "tensorflow/core/platform/types.h"
#include "tensorflow/core/public/session.h"
#include "tensorflow/core/util/command_line_flags.h" using namespace std;
using namespace tensorflow;
using namespace tensorflow::ops;
using tensorflow::Flag;
using tensorflow::Tensor;
using tensorflow::Status;
using tensorflow::string;
using tensorflow::int32; static Status ReadEntireFile(tensorflow::Env* env, const string& filename,
Tensor* output) {
tensorflow::uint64 file_size = ;
TF_RETURN_IF_ERROR(env->GetFileSize(filename, &file_size)); string contents;
contents.resize(file_size); std::unique_ptr<tensorflow::RandomAccessFile> file;
TF_RETURN_IF_ERROR(env->NewRandomAccessFile(filename, &file)); tensorflow::StringPiece data;
TF_RETURN_IF_ERROR(file->Read(, file_size, &data, &(contents)[]));
if (data.size() != file_size) {
return tensorflow::errors::DataLoss("Truncated read of '", filename,
"' expected ", file_size, " got ",
data.size());
}
// output->scalar<string>()() = data.ToString();
output->scalar<string>()() = string(data);
return Status::OK();
} Status ReadTensorFromImageFile(const string& file_name, const int input_height,
const int input_width, const float input_mean,
const float input_std,
std::vector<Tensor>* out_tensors) {
auto root = tensorflow::Scope::NewRootScope();
using namespace ::tensorflow::ops; string input_name = "file_reader";
string output_name = "normalized"; // read file_name into a tensor named input
Tensor input(tensorflow::DT_STRING, tensorflow::TensorShape());
TF_RETURN_IF_ERROR(
ReadEntireFile(tensorflow::Env::Default(), file_name, &input)); // use a placeholder to read input data
auto file_reader =
Placeholder(root.WithOpName("input"), tensorflow::DataType::DT_STRING); std::vector<std::pair<string, tensorflow::Tensor>> inputs = {
{"input", input},
}; // Now try to figure out what kind of file it is and decode it.
const int wanted_channels = ;
// tensorflow::Output image_reader;
// if (tensorflow::StringPiece(file_name).ends_with(".png")) {
// image_reader = DecodePng(root.WithOpName("png_reader"), file_reader,
// DecodePng::Channels(wanted_channels));
// } else if (tensorflow::StringPiece(file_name).ends_with(".gif")) {
// // gif decoder returns 4-D tensor, remove the first dim
// image_reader =
// Squeeze(root.WithOpName("squeeze_first_dim"),
// DecodeGif(root.WithOpName("gif_reader"), file_reader));
// } else if (tensorflow::StringPiece(file_name).ends_with(".bmp")) {
// image_reader = DecodeBmp(root.WithOpName("bmp_reader"), file_reader);
// } else {
// // Assume if it's neither a PNG nor a GIF then it must be a JPEG.
// image_reader = DecodeJpeg(root.WithOpName("jpeg_reader"), file_reader,
// DecodeJpeg::Channels(wanted_channels));
// }
tensorflow::Output image_reader;
if (tensorflow::str_util::EndsWith(file_name, ".png")) {
image_reader = DecodePng(root.WithOpName("png_reader"), file_reader,
DecodePng::Channels(wanted_channels));
} else if (tensorflow::str_util::EndsWith(file_name, ".gif")) {
// gif decoder returns 4-D tensor, remove the first dim
image_reader =
Squeeze(root.WithOpName("squeeze_first_dim"),
DecodeGif(root.WithOpName("gif_reader"), file_reader));
} else if (tensorflow::str_util::EndsWith(file_name, ".bmp")) {
image_reader = DecodeBmp(root.WithOpName("bmp_reader"), file_reader);
} else {
// Assume if it's neither a PNG nor a GIF then it must be a JPEG.
image_reader = DecodeJpeg(root.WithOpName("jpeg_reader"), file_reader,
DecodeJpeg::Channels(wanted_channels));
}
// Now cast the image data to float so we can do normal math on it.
auto float_caster =
Cast(root.WithOpName("float_caster"), image_reader, tensorflow::DT_FLOAT); auto dims_expander = ExpandDims(root.WithOpName("expand"), float_caster, ); float input_max = ;
Div(root.WithOpName("div"),dims_expander,input_max); tensorflow::GraphDef graph;
TF_RETURN_IF_ERROR(root.ToGraphDef(&graph)); std::unique_ptr<tensorflow::Session> session(
tensorflow::NewSession(tensorflow::SessionOptions()));
TF_RETURN_IF_ERROR(session->Create(graph));
// std::vector<Tensor> out_tensors;
// TF_RETURN_IF_ERROR(session->Run({}, {output_name + ":0", output_name + ":1"},
// {}, &out_tensors));
TF_RETURN_IF_ERROR(session->Run({inputs}, {"div"}, {}, out_tensors));
return Status::OK();
} int main()
{
Session* session;
Status status = NewSession(SessionOptions(), &session);//创建新会话Session string model_path="model.pb";
GraphDef graphdef; //Graph Definition for current model Status status_load = ReadBinaryProto(Env::Default(), model_path, &graphdef); //从pb文件中读取图模型;
if (!status_load.ok()) {
std::cout << "ERROR: Loading model failed..." << model_path << std::endl;
std::cout << status_load.ToString() << "\n";
return -;
}
Status status_create = session->Create(graphdef); //将模型导入会话Session中;
if (!status_create.ok()) {
std::cout << "ERROR: Creating graph in session failed..." << status_create.ToString() << std::endl;
return -;
}
cout << "Session successfully created."<< endl;
string image_path= "/home/u/tf1.13/tensorflow-c-mnist/digit.jpg";
int input_height =;
int input_width=;
int input_mean=;
int input_std=;
std::vector<Tensor> resized_tensors;
Status read_tensor_status =
ReadTensorFromImageFile(image_path, input_height, input_width, input_mean,
input_std, &resized_tensors);
if (!read_tensor_status.ok()) {
LOG(ERROR) << read_tensor_status;
cout<<"resing error"<<endl;
return -;
} const Tensor& resized_tensor = resized_tensors[];
std::cout << resized_tensor.DebugString()<<endl; vector<tensorflow::Tensor> outputs;
string output_node = "softmax";
Status status_run = session->Run({{"inputs", resized_tensor}}, {output_node}, {}, &outputs); if (!status_run.ok()) {
std::cout << "ERROR: RUN failed..." << std::endl;
std::cout << status_run.ToString() << "\n";
return -;
}
//Fetch output value
std::cout << "Output tensor size:" << outputs.size() << std::endl;
for (std::size_t i = ; i < outputs.size(); i++) {
std::cout << outputs[i].DebugString()<<endl;
} Tensor t = outputs[]; // Fetch the first tensor
int ndim2 = t.shape().dims(); // Get the dimension of the tensor
auto tmap = t.tensor<float, >(); // Tensor Shape: [batch_size, target_class_num]
int output_dim = t.shape().dim_size(); // Get the target_class_num from 1st dimension
std::vector<double> tout; // Argmax: Get Final Prediction Label and Probability
int output_class_id = -;
double output_prob = 0.0;
for (int j = ; j < output_dim; j++)
{
std::cout << "Class " << j << " prob:" << tmap(, j) << "," << std::endl;
if (tmap(, j) >= output_prob) {
output_class_id = j;
output_prob = tmap(, j);
}
} std::cout << "Final class id: " << output_class_id << std::endl;
std::cout << "Final class prob: " << output_prob << std::endl; return ;
}
u@u160406:~/tf1./tensorflow-c-mnist/build$ cmake ..
-- The C compiler identification is GNU 5.4.
-- The CXX compiler identification is GNU 5.4.
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/u/tf1./tensorflow-c-mnist/build u@u160406:~/tf1./tensorflow-c-mnist/build$ make
Scanning dependencies of target tf_test
[ %] Building CXX object CMakeFiles/tf_test.dir/tf.cpp.o
[%] Linking CXX executable tf_test
[%] Built target tf_test u@u160406:~/tf1./tensorflow-c-mnist/build$ ./tf_test
-- ::40.577836: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcuda.so.
-- ::40.599739: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::40.600269: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Found device with properties:
name: GeForce RTX Ti major: minor: memoryClockRate(GHz): 1.65
pciBusID: ::00.0
-- ::40.600401: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcudart.so.10.0
-- ::40.601114: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcublas.so.10.0
-- ::40.601796: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcufft.so.10.0
-- ::40.601986: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcurand.so.10.0
-- ::40.603086: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcusolver.so.10.0
-- ::40.603734: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcusparse.so.10.0
-- ::40.605733: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcudnn.so.
-- ::40.605793: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::40.606283: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::40.606722: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Adding visible gpu devices:
-- ::40.606738: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcudart.so.10.0
-- ::40.697274: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Device interconnect StreamExecutor with strength edge matrix:
-- ::40.697295: I tensorflow/core/common_runtime/gpu/gpu_device.cc:]
-- ::40.697302: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] : N
-- ::40.697444: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::40.697830: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::40.698271: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::40.698632: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Created TensorFlow device (/job:localhost/replica:/task:/device:GPU: with MB memory) -> physical GPU (device: , name: GeForce RTX Ti, pci bus id: ::00.0, compute capability: 7.5)
Session successfully created.
-- ::41.417655: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::41.419321: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Found device with properties:
name: GeForce RTX Ti major: minor: memoryClockRate(GHz): 1.65
pciBusID: ::00.0
-- ::41.419390: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcudart.so.10.0
-- ::41.419423: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcublas.so.10.0
-- ::41.419448: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcufft.so.10.0
-- ::41.419471: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcurand.so.10.0
-- ::41.419497: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcusolver.so.10.0
-- ::41.419523: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcusparse.so.10.0
-- ::41.419549: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcudnn.so.
-- ::41.419667: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::41.421127: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::41.422501: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Adding visible gpu devices:
-- ::41.422566: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Device interconnect StreamExecutor with strength edge matrix:
-- ::41.422592: I tensorflow/core/common_runtime/gpu/gpu_device.cc:]
-- ::41.422613: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] : N
-- ::41.423170: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::41.424636: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:] successful NUMA node read from SysFS had negative value (-), but there must be at least one NUMA node, so returning NUMA node zero
-- ::41.426045: I tensorflow/core/common_runtime/gpu/gpu_device.cc:] Created TensorFlow device (/job:localhost/replica:/task:/device:GPU: with MB memory) -> physical GPU (device: , name: GeForce RTX Ti, pci bus id: ::00.0, compute capability: 7.5)
Tensor<type: float shape: [,,,] values: [[[0.992156923][0.0823529437][]]]...>
-- ::44.755529: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcublas.so.10.0
-- ::45.821366: I tensorflow/stream_executor/platform/default/dso_loader.cc:] Successfully opened dynamic library libcudnn.so.
Output tensor size:
Tensor<type: float shape: [,] values: [0.000222602132 0.951202273 0.00674963091...]...>
Class prob:0.000222602,
Class prob:0.951202,
Class prob:0.00674963,
Class prob:0.00721128,
Class prob:0.0029518,
Class prob:0.0100965,
Class prob:0.0119467,
Class prob:0.00218653,
Class prob:0.00189467,
Class prob:0.00553806,
Final class id:
Final class prob: 0.951202 u@u160406:~/tf1./tensorflow-c-mnist/build$

@https://github.com/zhangcliff/tensorflow-c-mnist 会报错:

参照@https://blog.csdn.net/wd1603926823/article/details/92843830解决问题。

”“”“找了很久原因没解决。因为我去看string_view的源码,真的没有报错的这几个成员函数。所以可能是我用错了版本还是这几个函数已经被废弃。

今天终于解决了。原来上面这个例程是按照 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/label_image/main.cc  仿照这个来写的,而外国人进行了更新,国内很多人以前的博客都是老版本,所以我使用会出问题。 ”“”“

最新文章

  1. 接口测试第三课(HTTP协议简介) -- 转载
  2. 用Kotlin开发Android应用(IV):定制视图和Android扩展
  3. 业务中是否有必要让所有的ViewController统一继承抽象类
  4. css中margin-top/margin-bottom失效
  5. Windows Server 2008系统如何取消登录时要按Ctrl+Alt+Delete组合键
  6. hiveserver2以及beeline客户端的使用
  7. UIPanGestureRecognizer的使用
  8. Android-关于屏幕适配的一些经验
  9. 给centOs添加epel源
  10. Struts2 学习笔记18 拦截器原理分析
  11. pl/sql中if的用法
  12. ASP.NET Core 返回 Json DateTime 格式
  13. 设计模式学习心得&lt;组合模式 Composite&gt;
  14. ☆ [HDU4825] Xor Sum「最大异或和(Trie树)」
  15. 20145236《网络对抗》Exp 6 信息搜集与漏洞扫描
  16. Hybrid APP基础篇(一)-&gt;什么是Hybrid App
  17. 异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解决方案
  18. fl包下的TransitionManager的使用
  19. in有两种用法:
  20. C语言——链式存储实现栈的基本运算算法

热门文章

  1. 【Leetcode_easy】897. Increasing Order Search Tree
  2. 软件测试成熟度模型TCMM (转载)
  3. CentOS 7/6系统升级内核版本到5.2.2
  4. linux中信号的API详解实例
  5. gcc 不同版本的安装
  6. 创建线程的三种方式(Thread、Runnable、Callable)
  7. Scrapy框架1——简单使用
  8. python读取文件行数和某行内容
  9. EF Core 2.0 执行原始查询如何防止SQL注入
  10. Luogu3824 [NOI2017]泳池 【多项式取模】【递推】【矩阵快速幂】