1. 安装Tensorflow
1.1 下载
官方链接:
Windows(仅支持 CPU)
Windows(仅支持 GPU
这里我下的是cpu版,
1.2 解压
解压缩库文件:将下载的TensorFlow C库文件解压缩到自己选择的目录中。
这里我的路径是:D:\visualstudio\DownloadTools\libtensorflow-cpu-windows-x86_64-2.6.0
1.3 设置环境变量
在系统变量中,找到"Path"变量,并添加TensorFlow C库的路径到其中。
![2(https://img-blog.csdnimg.cn/direct/1a24cbea5c8346c6bb123379c5042969.png)
1.4 VisualStudio配置
打开项目属性:
在“VC++目录”选项卡中,将TensorFlow C库的头文件路径添加到“包含目录”列表中。
在“链接器”选项卡中,在右侧面板的“常规”下拉菜单中,选择“附加库目录”,添加TensorFlow C库的库文件路径
在“链接器”选项卡中,将“附加依赖项”设置为“tensorflow.lib”。这将告诉链接器链接TensorFlow C库。
在“C/C++”选项卡中,将“预处理器”设置为“_CRT_SECURE_NO_WARNINGS”,以避免由于使用不安全的函数而导致的编译器警告。
运行测试代码:
#include <stdio.h>
#include <tensorflow/c/c_api.h>
int main() {
printf("Hello from TensorFlow C library version %s\n", TF_Version());
return 0;
}
Ps:
中间出现提示找不到tensorflow.dll 👇
解决:将 TensorFlow DLL 文件手动复制到您的项目的输出目录(即包含可执行文件的目录)。这样可以确保程序能够找到并加载 TensorFlow DLL 文件。
2. 一个简单的小网络
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tensorflow/c/c_api.h>
#define TF_CHECK_OK(status) \
if (TF_GetCode(status) != TF_OK) { \
fprintf(stderr, "Error at line %d: %s", __LINE__, TF_Message(status)); \
exit(1); \
}
int main() {
// 创建一个图
TF_Graph* graph = TF_NewGraph();
// 创建一个会话
TF_Status* status = TF_NewStatus();
TF_SessionOptions* session_options = TF_NewSessionOptions();
TF_Session* session = TF_NewSession(graph, session_options, status);
TF_CHECK_OK(status);
// 构建计算图
// 创建一个占位符操作(Placeholder)作为输入节点
TF_Output input_op = { TF_GraphOperationByName(graph, "input"), 0 };
if (input_op.oper == NULL) {
fprintf(stderr, "Failed to find input operation\n");
exit(1);
}
// 创建一个常量操作(Const),代表常数值
float value = 3.14;
const int64_t dims[] = { 0 };
TF_Tensor* tensor = TF_AllocateTensor(TF_FLOAT, dims, 0, sizeof(float));
memcpy(TF_TensorData(tensor), &value, sizeof(float));
TF_Operation* constant_op = TF_Const(graph, "constant", tensor, status);
TF_CHECK_OK(status);
// 创建一个加法操作(Add)将输入和常量相加
TF_Output add_inputs[2] = { input_op, TF_OperationOutput(constant_op, 0) };
TF_Operation* add_op = TF_FinishOperation(TF_NewOperation(graph, "Add", "addition"), status);
TF_CHECK_OK(status);
TF_AddInput(add_op, add_inputs[0]);
TF_AddInput(add_op, add_inputs[1]);
// 初始化变量
TF_SessionRun(session, NULL, NULL, NULL, 0, NULL, NULL, 0, NULL, status);
TF_CHECK_OK(status);
// 运行计算图
// 为输入数据分配内存并设置输入值
const int64_t input_dims[] = { 1 };
TF_Tensor* input_tensor = TF_AllocateTensor(TF_FLOAT, input_dims, 1, sizeof(float));
float* input_data = (float*)TF_TensorData(input_tensor);
*input_data = 2.0;
// 指定输入和输出节点
const int input_node_count = 1;
const TF_Output* input_nodes = &input_op;
const TF_Tensor* const* input_tensors = &input_tensor;
const int output_node_count = 1;
TF_Output output_nodes[1] = { add_inputs[1] };
TF_Tensor* output_tensors[1] = { NULL };
// 执行会话,将输入数据传递给计算图,获取输出结果
TF_SessionRun(session, NULL, input_nodes, input_tensors, input_node_count, output_nodes, output_tensors, output_node_count, NULL, 0, NULL, status);
TF_CHECK_OK(status);
// 获取结果并打印
TF_Tensor* output_tensor = output_tensors[0];
float* output_data = (float*)TF_TensorData(output_tensor);
printf("Result: %f\n", *output_data);
// 释放资源
TF_DeleteTensor(input_tensor);
TF_DeleteStatus(status);
TF_CloseSession(session, status);
TF_DeleteSession(session, status);
TF_DeleteSessionOptions(session_options);
TF_DeleteGraph(graph);
return 0;
}