作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试复制 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
中的元素类型。假设它是一个简单类型(如 float
、double
或 int32
,但不是 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/
我是一名优秀的程序员,十分优秀!