C++ Tensorflow中的自定义资源
出于某些原因,我需要为Tensorflow实现一个自定义资源。我试图从查找表的实现中获得灵感。如果我理解得很好,我需要执行3个TF操作: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/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
添加到构建标志中。
本文解释了这种变通方法