可以一个TensorFlow图加载每个文件而不是目录与C API?



对于我们的项目来说,网络是由文件加载的。

此刻我加载每个目录的saved_model。

auto tfSessionOpts = TF_NewSessionOptions();
runOpts = nullptr:
TF_Session * pSession = TF_LoadSessionFromSavedModel(tfSessionOpts,
                                                     runOpts,
                                                     m_strModelDir.c_str(),
                                                     m_vecTags.data(),
                                                     static_cast<int>(m_vecTags.size()),
                                                     m_graph,
                                                     nullptr,
                                                     status);

现在我必须切换到每个文件加载方法,同时使用c_api。我有一个frozen_graph。pb,我想在C中加载,并从中获取一些信息,用于设置(张量等),并运行会话。我所做的是:

加载frozen_graph。Pb进入缓冲区:

std::ifstream f(m_strModelFile, std::ios::binary);
if (f.seekg(0, std::ios::end).fail()) { throw; }
auto fsize = f.tellg();
if (f.seekg(0, std::ios::beg).fail()) { throw; }
if (fsize <= 0) { throw; }
auto data = static_cast<char*>(std::malloc(fsize));
if (f.read(data, fsize).fail()) { throw; }
TF_Buffer* pBuffer = TF_NewBuffer();
pBuffer->data = data;
pBuffer->length = fsize;
pBuffer->data_deallocator = DeallocateBuffer;

使用缓冲区加载图形(状态为ok):

TF_ImportGraphDefOptions* pGraphDefOptions = TF_NewImportGraphDefOptions();
TF_GraphImportGraphDef(m_graph, pBuffer, pGraphDefOptions, status);

加载会话(状态为ok):

auto tfSessionOpts = TF_NewSessionOptions();
TF_Session* session = TF_NewSession(m_graph, sessionOptions, status);

缓冲区有正确的大小,图和会话不是nullptr和状态说"ok"。但是当我想用图形的时候,就没有信息可以用了。例如,我不能得到具体的操作:

auto input_op = TF_Output{ TF_GraphOperationByName(m_graph, "StatefulPartitionedCall"), 1 };
if (input_op.oper == nullptr)
{
 throw; // this happens
}

但是,当我使用TF_LoadSessionFromSavedModel函数构建图时,我可以访问此信息。

是我做错了什么,或者可以用有用的信息的图形不加载每个文件名?

如果c_api是不可能的,那么c++ API是可能的吗?

可能是你没有加载图形操作吗?

std::unique_ptr<TF_ImportGraphDefOptions,
                decltype(&TF_DeleteImportGraphDefOptions)> graph_opts = {
TF_NewImportGraphDefOptions(), TF_DeleteImportGraphDefOptions};
TF_GraphImportGraphDef(m_graph.get(), def, graph_opts.get(),
                       status.get());

相关内容

  • 没有找到相关文章

最新更新