gpt4 book ai didi

c++ - 等同于在 C++ 中重新解释 Node.js fii

转载 作者:行者123 更新时间:2023-11-30 05:26:22 26 4
gpt4 key购买 nike

我正在尝试复制 this C++ 中的示例,我卡在了读取数据的绝对最后一步。

exports.TF_ReadTensorData = function(tensor, size, type) {
var ptr = libtensorflow.TF_TensorData(tensor);
ptr = ptr.reinterpret(size, 0);
ptr.type = type;
return ptr.deref();
}

到目前为止,对于 C++,我已经这样做了。

#include <bits/stdc++.h>
#include "tf_session_helper.h"
#include "tf_session_helper.cc"
#include "tf_tensor_helper.cc"
#include "tensorflow/core/public/tensor_c_api.h"
using namespace std;

main()
{
TF_DataType::TF_UINT16;
auto status = TF_NewStatus();
auto status_ops = TF_NewSessionOptions();
auto session = TF_NewSession(status_ops, status);
std::ifstream in("graph.pb");
std::string contents((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
TF_ExtendGraph(session,contents.c_str(),contents.length(),status);
long long adims[] ={};
float aData[] ={3};
auto aTensor = tensorflow::TF_NewTensor_wrapper(TF_DataType::TF_FLOAT,adims,0,aData,(sizeof(aData)/sizeof(*aData)));
long long bdims[] ={};
float bData[] ={2};
auto bTensor = tensorflow::TF_NewTensor_wrapper(TF_DataType::TF_FLOAT,bdims,0,bData,(sizeof(bData)/sizeof(*bData)));
vector<std::string> input_names;
input_names.push_back("a");
input_names.push_back("b");
vector<std::string> output_names;
output_names.push_back("c");
vector<std::string> target_names;
std::vector<TF_Tensor*> inputs;
inputs.push_back(aTensor);inputs.push_back(bTensor);
std::vector<TF_Tensor*> output;

tensorflow::TF_Run_wrapper(session,input_names,inputs,output_names,output,target_names,status);
cout << (TF_GetCode(status) == TF_Code::TF_OK) << "\n";
auto c = output[0];
auto type = TF_TensorType(c);
auto dims = TF_NumDims(c);
auto size = TF_TensorByteSize(c);
auto readed = TF_TensorData(c);
cout << type << " " << dims << " " << size << " " << "\n";

}

我不是真正的 C++ 专家,我想知道如何在 C++ 中复制 ptr = ptr.reinterpret(size, 0)。我还使用共享库来编译它。

最佳答案

我假设您想访问 readed = TF_TensorData(c) 中的数据。您处理此问题的方式取决于张量 c 中的元素类型。假设它是一个简单类型(如 floatdoubleint32,但不是 string),您可以只需将数据转换为该类型的数组。例如,假设 c 是一个 float 张量:

float* tensor_data = static_cast<float*>(TF_TensorData(c));

int64 total_elements = 1;
for (int i = 0; i < dims; ++i) {
total_elements *= TF_Dim(c, i);
}

// Print every element of the tensor:
for (int i = 0; i < total_elements; ++i) {
cout << tensor_data[i];
}

TensorFlow 代码库包含使用 TF_TensorData() 访问 tf_session_helper.cc 中的张量内容的示例.但是,请注意,这些示例与 Python C API 的使用交织在一起,因此它们不是最易读的代码。

您可能会发现使用 TensorFlow C++ API 比使用 C API 更容易。文件example_trainer.cc显示如何使用 tensorflow::Session类来运行 TensorFlow 图形并将结果检索为 tensorflow::Tensor更易于操作的对象。

关于c++ - 等同于在 C++ 中重新解释 Node.js fii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37837019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com