2016-10-25 54 views
0

我想了解如何install new op。所以爲了做到這一點,我按照給定的教程。我創建了一個名爲user_ops的文件夾,創建一個「zero_out.cc」文件並複製教程中給出的代碼。當我試圖將Op編譯成動態庫時出現g ++錯誤:錯誤編譯new_op教程(Tensorflow)

zero_out.cc: In lambda function: zero_out.cc:10:14: error: ‘Status’ has not been declared return Status::OK(); ^ zero_out.cc: At global scope: zero_out.cc:11:6: error: invalid user-defined conversion from ‘’ to ‘tensorflow::Status ()(tensorflow::shape_inference::InferenceContext)’ [-fpermissive] }); ^ zero_out.cc:8:70: note: candidate is: ::operator void ()(tensorflow::shape_inference::InferenceContext)() const .SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) { ^ zero_out.cc:8:70: note: no known conversion from ‘void ()(tensorflow::shape_inference::InferenceContext)’ to ‘tensorflow::Status ()(tensorflow::shape_inference::InferenceContext)’ In file included from zero_out.cc:1:0: /usr/local/lib/python2.7/dist-packages/tensorflow/include/tensorflow/core/framework/op.h:252:30: note: initializing argument 1 of ‘tensorflow::register_op::OpDefBuilderWrapper& tensorflow::register_op::OpDefBuilderWrapper::SetShapeFn(tensorflow::Status ()(tensorflow::shape_inference::InferenceContext))’ OpDefBuilderWrapper& SetShapeFn(<

爲什麼會發生這種情況?我怎麼能解決這個問題?

回答

1

假設你唯一的問題是不確定的Status類型 - 複製和粘貼的教程代碼工作,除了這個就好了 - 你需要在第一次使用的Status之前,無論是移動using namespace tensorflow,或者完全限定它(在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(); 
    }); 
0

對我來說,似乎Tensorflow tutorial沒有正確的代碼。 所以我跟着這個tutorial的代碼,它完美的工作! 我不知道它說什麼!