2017-09-06 31 views
1

我想在tensorflow中添加一个新的整数Matrix Multiplication OP,并且我无法将其成功注册为tf操作,以便它可以成为在python中称为tf.intmatmul。无法在Tensorflow中的Python shell中获得新的tf.Operation

我做的步骤: 1)在math_ops.cc文件中新增了一个REGISTER_OP - IntMatMul。

2)增加了对这种OP在芯/内核路径中的新内核执行 - int_matmul_op.cc和一个相应的头文件 - int_matmul_op.h

3)I添加OP的依赖性在芯/内核/ BUILD文件。这将为此OP添加内核链接。

4)添加了定义该OP(如 'intmatmul')在Python包装文件即蟒/操作/ math_ops.py - 此文件调用gen_math_ops.int_mat_mul

从源5)重新建使用Bazel并使用pip软件包重新安装Tensorflow。

但是,当我尝试将此OP用作tf.intmatmul时,出现错误,提示模块未定义。 我不知道现在我在这里错过了什么。有什么链接丢失? 我是否还需要在核心/ BUILD文件中添加任何OP链接?

回答

2

UPDATE:

因此,这被证明是更复杂的超过预期。这些都是必须考虑到的东西:

  • 显然,为了使功能暴露公共API(即在tf.级),它的名字必须的初上市模块在其文档字符串前面@@。以math_ops.py为例。
  • 即使您仍然可以从内部模块访问它(例如,执行from tensorflow.python.ops import math_ops),但内核定义必须绝对正确才能将操作反映为操作。

-

作为the docs指示,操作的名称,即必须用C++中的驼峰标识符被注册,则“翻译”成在Python snake_case。改为尝试tf.int_mat_mul

作为一个附注,该教程提供了额外的指导来实现自定义操作,而无需从源代码重新编译TensorFlow,而是从自定义库中加载它。

+0

我也试了一下。不起作用。我相信tensorflow采用在python包装中定义的名称。在这种情况下,我已经将它定义为intmatmul在python包装中。 –

+0

我应该在哪里做这个别名?在python包装文件? –

+0

我尝试了这两种方法。似乎还没有为我工作呢。确切的错误是: AttributeError的回溯(最近最后调用) () 1 MAT1 = tf.placeholder(tf.int16) 2 MAT2 = tf.placeholder(TF。 int16) ----> 3 pro = tf。intmatmul(mat1,mat2) AttributeError:'模块'对象没有属性'intmatmul' –