我想了解如何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(小于
为什么会这样?我怎么能解决这个问题?
答案 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)