编译new_op教程时出错(Tensorflow)

时间:2016-10-25 14:18:31

标签: python c++ compiler-errors tensorflow new-operator

我想了解如何install new op。所以,为了做到这一点,我m遵循给定的教程。我创建了一个名为user_ops的文件夹,创建了一个" zero_out.cc"文件并复制教程中给出的代码。当我'我试图将Op编译成一个带有g ++错误的动态库:

  

zero_out.cc:在lambda函数中:   zero_out.cc:10:14:错误:'状态'尚未声明          return Status :: OK();                 ^   zero_out.cc:在全球范围内:   zero_out.cc:11:6:错误:从''到'tensorflow ::状态()(tensorflow :: shape_inference :: InferenceContext )'[-fpermissive]的用户定义转换无效        });         ^   zero_out.cc:8:70:注意:候选者是::: operator void()(tensorflow :: shape_inference :: InferenceContext )()const        .SetShapeFn([](:: tensorflow :: shape_inference :: InferenceContext * c){                                                                         ^   zero_out.cc:8:70:注意:没有已知的'void()(tensorflow :: shape_inference :: InferenceContext )'转换为'tensorflow :: Status()(tensorflow :: shape_inference :: InferenceContext )”   在zero_out.cc:1:0中包含的文件中:   /usr/local/lib/python2.7/dist-packages/tensorflow/include/tensorflow/core/framework/op.h:252:30:注意:初始化'tensorflow :: register_op :: OpDefBuilderWrapper&的参数1 tensorflow :: register_op :: OpDefBuilderWrapper :: SetShapeFn(tensorflow :: Status()(tensorflow :: shape_inference :: InferenceContext ))'      OpDefBuilderWrapper&安培; SetShapeFn(小于

为什么会这样?我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:1)

假设您唯一的问题是未定义的Status类型 - 并且复制和粘贴教程代码的工作正常,除此之外 - 您需要在第一次使用之前将using namespace tensorflow移动到Status,或完全限定(如return tensorflow::Status::OK()

例如,REGISTER_OP部分可以如下所示,如果您使用模板化版本:

REGISTER_OP("ZeroOut")
    .Attr("T: {float, int32}")
    .Input("to_zero: T")
    .Output("zeroed: T")
    .SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) {
      c->set_output(0, c->input(0));
      return tensorflow::Status::OK();
    });

答案 1 :(得分:0)

在我看来,Tensorflow tutorial没有正确的代码。 所以我遵循了这个tutorial的代码,它运作得很好! 我不知道它说的是什么!