C++ Tensorflow中的自定义资源

C++ Tensorflow中的自定义资源,c++,tensorflow,tensorflow-serving,C++,Tensorflow,Tensorflow Serving,出于某些原因,我需要为Tensorflow实现一个自定义资源。我试图从查找表的实现中获得灵感。如果我理解得很好,我需要执行3个TF操作: 创建我的资源 资源初始化(例如,在查找表的情况下填充哈希表) 查找/查找/查询步骤的实现 为了便于实现,我依赖于tensorflow/core/framework/resource\u op\u kernel.h。我得到以下错误 [F tensorflow/core/lib/core/refcount.h:90] Check failed: ref_.load

出于某些原因,我需要为Tensorflow实现一个自定义资源。我试图从查找表的实现中获得灵感。如果我理解得很好,我需要执行3个TF操作:

  • 创建我的资源
  • 资源初始化(例如,在查找表的情况下填充哈希表)
  • 查找/查找/查询步骤的实现
  • 为了便于实现,我依赖于
    tensorflow/core/framework/resource\u op\u kernel.h
    。我得到以下错误

    [F tensorflow/core/lib/core/refcount.h:90] Check failed: ref_.load() == 0 (1 vs. 0)
    1]    29701 abort      python test.py
    
    以下是重现该问题的完整代码:

    使用名称空间tensorflow;
    /**自定义资源**/
    类MyVector:公共资源库{
    公众:
    string DebugString()重写{返回“MyVector”;};
    私人:
    std::向量向量向量;
    };
    /**创建向量**/
    寄存器_OP(“CreateMyVector”)
    .Attr(“容器:字符串=“””)
    .Attr(“共享名称:字符串=“””)
    .输出(“资源:资源”)
    .SetIsStateful();
    类MyVectorOp:公共资源内核{
    公众:
    显式MyVectorOp(OpKernelConstruction*ctx):ResourceOpKernel(ctx){}
    私人:
    状态CreateResource(MyVector**resource)覆盖{
    *resource=CHECK\u NOTNULL(新的MyVector);
    if(*resource==nullptr){
    返回错误::资源耗尽(“分配失败”);
    }
    返回状态::OK();
    }
    状态验证资源(MyVector*vec)覆盖{
    返回状态::OK();
    }
    };
    注册内核构建器(名称(“CreateMyVector”)。设备(设备CPU),MyVectorOp)
    
    然后,在编译之后,可以使用以下Python代码片段再现错误:

    test\u模块=tf.load\u op\u库('./test.so')
    my_vec=测试模块。创建my_vector()
    将tf.Session()作为s:
    s、 跑步(我的车)
    
    作为一个附带问题,我对实现自定义资源的教程/指南感兴趣。特别是,我想了解检查点/图形导出/序列化等需要实现哪些功能


    非常感谢。

    -DNDEBUG
    添加到构建标志中。 本文解释了这种变通方法