Tensorflow中的自定义新操作导致异常'指针被释放未被分配'

时间:2016-06-27 07:34:34

标签: tensorflow

我正在学习如何在Google's tutorial之后向tensorflow添加操作,但遇到了一些麻烦。

我从Github克隆了源代码,并计划在Fact中将tensorflow/core/user_ops/fact.cc操作添加到框架中。以下是我的方法:

  1. BUILD中创建一个tensorflow/core/user_ops/文件,内容为:
  2. load("//tensorflow:tensorflow.bzl", "tf_custom_op_library")
    
    tf_custom_op_library(
        name = "fact.so",
        srcs = ["fact.cc"]
    )
    
    1. 在克隆项目的根目录中运行以下命令:
    2.   

      bazel build -c opt -s //tensorflow/core/user_ops:fact.so

      这会在fact.so

      中创建一个bazel-bin/tensorflow/core/user_ops/文件
      1. 将生成的fact.so复制到我的Python项目中,该项目位于另一个不相关的位置。

      2. 在Python项目中,运行

      3. import tensorflow as tf
        
        fact_module = tf.load_op_library('fact.so')
        with tf.Session(''):
          print(fact_module.fact2().eval())
        

        结果是一个例外:

          

        python(77790,0x7fff742f7000)malloc: *对象错误   0x1c890ffde89:未分配被释放的指针   * 在malloc_error_break中设置断点以调试Abort trap:6

        但是,如果我使用clang ++直接构建操作,如:

          

        clang ++ -std = c ++ 11 -shared tensorflow / core / user_ops / fact.cc -o   〜/ Desktop / fact.so -fPIC -I $ TF_INC -undefined dynamic_lookup

        其中$ TF_INC由

        计算
          

        TF_INC = $(python -c'import tensorflow as tf;   打印(tf.sysconfig.get_include())')

        一切正常。

        有人能告诉我为什么第一种方法失败了吗?

0 个答案:

没有答案