在Tensorflow C ++ API中初始化变量

时间:2017-06-27 08:07:13

标签: c++ tensorflow

我无法在Tensorflow的C ++ API中找到初始化变量的工作方式。我正在尝试为MNIST数据集建立一个基本的完全连接的单层神经网络。

目前,我发现正确的做法是:

TF_CHECK_OK(session->Run({}, {}, {"init_all_vars_op"}, nullptr));

但是,使用它会返回以下错误:

tensorflow/cc/example/example.cc:178:71: error: no matching function for call to 'tensorflow::ClientSession::Run(<brace-enclosed initializer list>, <brace-enclosed initializer list>, <brace-enclosed initializer list>, std::nullptr_t)'

之前有没有遇到过这个?如果你这样做了,你是如何解决它的?

编辑:我应该补充说,如果我删除任何初始化我使用的变量的尝试,只是运行会话它将编译,但它返回:

  

2017-06-27 11:31:12.861244:W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE4.1指令,但这些指令可在您的计算机上使用并且可以加速CPU计算。

     

2017-06-27 11:31:12.862007:W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE4.2指令,但这些指令可在您的机器上使用并且可以加速CPU计算。

     

2017-06-27 11:31:12.862433:W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用AVX指令,但这些可在您的计算机上使用,并且可以加速CPU计算。

     

2017-06-27 11:31:12.866282:F tensorflow / cc / example / example.cc:180]非OK状态:session-&gt;运行(feed,{y_pred}和&amp;输出)状态:失败的前提条件:尝试使用未初始化的值权重

     

[[Node:MatMul = MatMul [T = DT_FLOAT,transpose_a = false,transpose_b = false,_device =&#34; / job:localhost / replica:0 / task:0 / cpu:0&#34;]( _arg_x_0_0,权重)]]

     

/ usr / bin / bazel退出代码8

2 个答案:

答案 0 :(得分:1)

我设法找到一个只能在变量的初始状态不重要的环境中工作的解决方案。您可以使用Assign方法将值0初始分配给变量,因为Assign不要求在事先初始化变量。这个初始化应该在列车循环之前完成:

auto init_value = Const(root, 0);

auto assign = Assign(root.WithOpName("assign"), var, init_value);

我还没有在此代码段上运行测试,但它会在我当前的源代码中编译。

答案 1 :(得分:0)

看起来代码没有使用对session.run的调用进行编译。这可能是由于有问题的类型推断,因为tensorflow :: ClientSession :: Run被许多不同的签名重载。尝试使用显式类型名称替换{}初始值设定项。