- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Python代码:
import os
import sys
from subprocess import check_call
import tensorflow as tf
CC_NAME = "tf-resource-op.cc"
SO_NAME = "tf-resource-op.so"
def compile_so():
use_cxx11_abi = hasattr(tf, 'CXX11_ABI_FLAG') and tf.CXX11_ABI_FLAG
common_opts = ["-shared", "-O2"]
common_opts += ["-std=c++11"]
if sys.platform == "darwin":
common_opts += ["-undefined", "dynamic_lookup"]
tf_include = tf.sysconfig.get_include() # e.g. "...python2.7/site-packages/tensorflow/include"
tf_include_nsync = tf_include + "/external/nsync/public" # https://github.com/tensorflow/tensorflow/issues/2412
include_paths = [tf_include, tf_include_nsync]
for include_path in include_paths:
common_opts += ["-I", include_path]
common_opts += ["-fPIC", "-v"]
common_opts += ["-D_GLIBCXX_USE_CXX11_ABI=%i" % (1 if use_cxx11_abi else 0)]
common_opts += ["-g"]
opts = common_opts + [CC_NAME, "-o", SO_NAME]
ld_flags = ["-L%s" % tf.sysconfig.get_lib(), "-ltensorflow_framework"]
opts += ld_flags
cmd_bin = "g++"
cmd_args = [cmd_bin] + opts
print("$ %s" % " ".join(cmd_args))
check_call(cmd_args)
def main():
if not os.path.exists(SO_NAME):
compile_so()
mod = tf.load_op_library(SO_NAME)
handle = mod.open_fst_load(filename="foo.bar")
new_states, scores = mod.open_fst_transition(handle=handle, inputs=[0], states=[0])
with tf.Session() as session:
# InternalError: ndarray was 1 bytes but TF_Tensor was 98 bytes
# print("fst:", session.run(handle))
out_new_states, out_scores = session.run((new_states, scores))
print("output new states:", out_new_states)
print("output scores:", out_scores)
# When session unloads, crashes with assertion:
# F .../site-packages/tensorflow/include/tensorflow/core/lib/core/refcount.h:79] Check failed: ref_.load() == 0 (1 vs. 0) # nopep8
if __name__ == '__main__':
import better_exchook
better_exchook.install()
main()
C++代码:
#include <exception>
#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/op_kernel.h"
#include "tensorflow/core/framework/shape_inference.h"
#include "tensorflow/core/framework/resource_mgr.h"
#include "tensorflow/core/framework/resource_op_kernel.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/platform/macros.h"
#include "tensorflow/core/platform/mutex.h"
#include "tensorflow/core/platform/types.h"
using namespace tensorflow;
REGISTER_OP("OpenFstLoad")
.Attr("filename: string")
.Attr("container: string = ''")
.Attr("shared_name: string = ''")
.Output("handle: resource")
.SetIsStateful()
.SetShapeFn(shape_inference::ScalarShape)
.Doc("OpenFstLoad: loads FST, creates TF resource, persistent across runs in the session");
REGISTER_OP("OpenFstTransition")
.Input("handle: resource")
.Input("states: int32")
.Input("inputs: int32")
.Output("new_states: int32")
.Output("scores: float32")
.SetShapeFn([](::tensorflow::shape_inference::InferenceContext* c) {
c->set_output(0, c->input(1));
c->set_output(1, c->input(1));
return Status::OK();
})
.Doc("OpenFstTransition: performs a transition");
struct OpenFstInstance : public ResourceBase {
explicit OpenFstInstance(const string& filename) : filename_(filename) {}
string DebugString() override {
return strings::StrCat("OpenFstInstance[", filename_, "]");
}
const string filename_;
};
// https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/resource_op_kernel.h
// TFUtil.TFArrayContainer
class OpenFstLoadOp : public ResourceOpKernel<OpenFstInstance> {
public:
explicit OpenFstLoadOp(OpKernelConstruction* context)
: ResourceOpKernel(context) {
OP_REQUIRES_OK(context, context->GetAttr("filename", &filename_));
}
private:
virtual bool IsCancellable() const { return false; }
virtual void Cancel() {}
Status CreateResource(OpenFstInstance** ret) override EXCLUSIVE_LOCKS_REQUIRED(mu_) {
try {
*ret = new OpenFstInstance(filename_);
} catch (std::exception& exc) {
return errors::Internal("Could not load OpenFst ", filename_, ", exception: ", exc.what());
}
if(*ret == nullptr)
return errors::ResourceExhausted("Failed to allocate");
return Status::OK();
}
Status VerifyResource(OpenFstInstance* fst) override {
if(fst->filename_ != filename_)
return errors::InvalidArgument("Filename mismatch: expected ", filename_,
" but got ", fst->filename_, ".");
return Status::OK();
}
string filename_;
};
REGISTER_KERNEL_BUILDER(Name("OpenFstLoad").Device(DEVICE_CPU), OpenFstLoadOp);
class OpenFstTransitionOp : public OpKernel {
public:
using OpKernel::OpKernel;
void Compute(OpKernelContext* context) override {
OpenFstInstance* fst;
OP_REQUIRES_OK(context, GetResourceFromContext(context, "handle", &fst));
core::ScopedUnref unref(fst);
const Tensor& states_tensor = context->input(1);
auto states_flat = states_tensor.flat<int32>();
const Tensor& inputs_tensor = context->input(2);
auto inputs_flat = inputs_tensor.flat<int32>();
OP_REQUIRES(
context,
TensorShapeUtils::IsVector(states_tensor.shape()) &&
TensorShapeUtils::IsVector(inputs_tensor.shape()) &&
states_flat.size() == inputs_flat.size(),
errors::InvalidArgument(
"Shape mismatch. states ", states_tensor.shape().DebugString(),
" vs inputs ", inputs_tensor.shape().DebugString()));
Tensor* output_new_states_tensor = NULL;
OP_REQUIRES_OK(context, context->allocate_output(0, states_tensor.shape(), &output_new_states_tensor));
auto output_new_states_flat = output_new_states_tensor->flat<int32>();
Tensor* output_scores_tensor = NULL;
OP_REQUIRES_OK(context, context->allocate_output(1, states_tensor.shape(), &output_scores_tensor));
auto output_scores_flat = output_scores_tensor->flat<float>();
for(int i = 0; i < inputs_flat.size(); ++i) {
output_new_states_flat(i) = -1; // TODO
output_scores_flat(i) = -1.; // TODO
}
}
};
REGISTER_KERNEL_BUILDER(Name("OpenFstTransition").Device(DEVICE_CPU), OpenFstTransitionOp);
一些问题:
运行 print("fst:", session.run(handle))
抛出异常 InternalError: ndarray was 1 bytes but TF_Tensor was 98 bytes
。为什么?什么意思?
当 session 卸载时,它会因断言而崩溃:F .../site-packages/tensorflow/include/tensorflow/core/lib/core/refcount.h:79] 检查失败:ref_.load() == 0(1 对 0)
。堆栈跟踪:
2 libsystem_c.dylib 0x00007fff6687d1ae abort + 127
3 libtensorflow_framework.so 0x0000000107382e70 tensorflow::internal::LogMessageFatal::~LogMessageFatal() + 32
4 libtensorflow_framework.so 0x0000000107382e80 tensorflow::internal::LogMessageFatal::~LogMessageFatal() + 16
5 tf-resource-op.so 0x0000000128093d82 tensorflow::core::RefCounted::~RefCounted() + 162
6 tf-resource-op.so 0x0000000128095e2e OpenFstInstance::~OpenFstInstance() + 46 (tf-resource-op.cc:40)
7 libtensorflow_framework.so 0x000000010726a1f3 tensorflow::ResourceMgr::DoDelete(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 307
8 libtensorflow_framework.so 0x000000010726a433 tensorflow::ResourceMgr::DoDelete(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::type_index, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 99
9 tf-resource-op.so 0x000000012809457b tensorflow::ResourceOpKernel<OpenFstInstance>::~ResourceOpKernel() + 91 (resource_op_kernel.h:60)
10 tf-resource-op.so 0x0000000128094694 OpenFstLoadOp::~OpenFstLoadOp() + 52 (tf-resource-op.cc:53)
11 libtensorflow_framework.so 0x0000000107264d4f tensorflow::OpSegment::Item::~Item() + 63
12 libtensorflow_framework.so 0x000000010726558f tensorflow::OpSegment::RemoveHold(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 303
13 _pywrap_tensorflow_internal.so 0x0000000113b7b712 tensorflow::DirectSession::~DirectSession() + 274
14 _pywrap_tensorflow_internal.so 0x0000000113b7bade tensorflow::DirectSession::~DirectSession() + 14
我猜 OpenFstInstance
对象的引用计数有问题。但为什么?我该如何解决?
(相关的是 this question .)
最佳答案
将 -DNDEBUG
添加到构建标志可解决此问题。in TF issue 17316 解释了此解决方法.
关于python - 具有资源句柄的 TensorFlow 自定义 C++ 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774526/
我正在努力做到这一点 在我的操作中从数据库获取对象列表(确定) 在 JSP 上打印(确定) 此列表作为 JSP 中的可编辑表出现。我想修改然后将其提交回同一操作以将其保存在我的数据库中(失败。当我使用
我有以下形式的 Linq to Entities 查询: var x = from a in SomeData where ... some conditions ... select
我有以下查询。 var query = Repository.Query() .Where(p => !p.IsDeleted && p.Article.ArticleSections.Cou
我正在编写一个应用程序包,其中包含一个主类,其中主方法与GUI类分开,GUI类包含一个带有jtabbedpane的jframe,它有两个选项卡,第一个选项卡包含一个jtable,称为jtable1,第
以下代码产生错误 The nested query is not supported. Operation1='Case' Operation2='Collect' 问题是我做错了什么?我该如何解决?
我已经为 HA redis 集群(2 个副本、1 个主节点、3 个哨兵)设置了本地 docker 环境。只有哨兵暴露端口(10021、10022、10023)。 我使用的是 stackexchange
我正在 Desk.com 中构建一个“集成 URL”,它使用 Shopify Liquid 模板过滤器语法。对于开始日期为 7 天前而结束日期为现在的查询,此 URL 需要包含“开始日期”和“结束日期
你一定想过。然而情况却不理想,python中只能使用类似于 i++/i--等操作。 python中的自增操作 下面代码几乎是所有程序员在python中进行自增(减)操作的常用
我需要在每个使用 github 操作的手动构建中显示分支。例如:https://gyazo.com/2131bf83b0df1e2157480e5be842d4fb 我应该显示分支而不是一个。 最佳答
我有一个关于 Perl qr 运算符的问题: #!/usr/bin/perl -w &mysplit("a:b:c", /:/); sub mysplit { my($str, $patt
我已经使用 ArgoUML 创建了一个 ERD(实体关系图),我希望在一个类中创建两个操作,它们都具有 void 返回类型。但是,我只能创建一个返回 void 类型的操作。 例如: 我能够将 book
Github 操作仍处于测试阶段并且很新,但我希望有人可以提供帮助。我认为可以在主分支和拉取请求上运行 github 操作,如下所示: on: pull_request push: b
我正在尝试创建一个 Twilio 工作流来调用电话并记录用户所说的内容。为此,我正在使用 Record,但我不确定要在 action 参数中放置什么。 尽管我知道 Twilio 会发送有关调用该 UR
我不确定这是否可行,但值得一试。我正在使用模板缓冲区来减少使用此算法的延迟渲染器中光体积的过度绘制(当相机位于体积之外时): 使用廉价的着色器,将深度测试设置为 LEQUAL 绘制背面,将它们标记在模
有没有聪明的方法来复制 和 重命名 文件通过 GitHub 操作? 我想将一些自述文件复制到 /docs文件夹(:= 同一个 repo,不是远程的!),它们将根据它们的 frontmatter 重命名
我有一个 .csv 文件,其中第一列包含用户名。它们采用 FirstName LastName 的形式。我想获取 FirstName 并将 LastName 的第一个字符添加到它上面,然后删除空格。然
Sitecore 根据 Sitecore 树中定义的项目名称生成 URL, http://samplewebsite/Pages/Sample Page 但我们的客户有兴趣降低所有 URL(页面/示例
我正在尝试进行一些计算,但是一旦我输入金额,它就会完成。我只是希望通过单击按钮而不是自动发生这种情况。 到目前为止我做了什么: Angular JS - programming-fr
我的公司创建了一种在环境之间移动文件的复杂方法,现在我们希望将某些构建的 JS 文件(已转换和缩小)从一个 github 存储库移动到另一个。使用 github 操作可以实现这一点吗? 最佳答案 最简
在我的代码中,我创建了一个 JSONArray 对象。并向 JSONArray 对象添加了两个 JSONObject。我使用的是 json-simple-1.1.jar。我的代码是 package j
我是一名优秀的程序员,十分优秀!