我正在为x86和ARMv7上运行的TensorFlow(r1.0)创建新的ops(https://www.tensorflow.org/extend/adding_an_op)。
在ARMv7上运行TensorFlow需要进行少量代码修改,但本指南有很多帮助: https://github.com/samjabrahams/tensorflow-on-raspberry-pi/blob/master/GUIDE.md
但我注意到自定义操作不适用于TensorFlow的ARMv7安装。
例如,当我在ARMv7上的Python脚本中测试我的自定义操作时:
import tensorflow as tf
_custom_op_module = tf.load_op_library('custom_op.so')
custom_op = _custom_op_module.add_stub
我收到以下错误(在x86上没有显示):
$ python test_custom_op.py
Traceback (most recent call last):
File "custom_op.py", line 3, in <module>
add_stub = _custom_op_module.add_stub
AttributeError: 'module' object has no attribute 'custom_op'
我进一步调查了这个问题,显然在.so库文件中没有我的自定义操作。
$ python
>>> import tensorflow as tf
>>> _custom_op_module = tf.load_op_library('custom_op.so')
>>> dir(_custom_op_module)
>>> ['LIB_HANDLE', 'OP_LIST', '_InitOpDefLibrary', '__builtins__', '__doc__', '__name__', '__package__', '_collections', '_common_shapes', '_op_def_lib', '_op_def_library', '_op_def_pb2', '_op_def_registry', '_ops', '_text_format']
>>> _custom_op_module.OP_LIST
>>>
x86上的相同命令具有以下输出:
>>> import tensorflow as tf
>>> _custom_op_module = tf.load_op_library('custom_op.so')
>>> dir(_custom_op_module)
>>> ['LIB_HANDLE', 'OP_LIST', '_InitOpDefLibrary', '__builtins__', '__doc__', '__name__', '__package__', '_add_stub_outputs', '_collections', '_common_shapes', '_op_def_lib', '_op_def_library', '_op_def_pb2', '_op_def_registry', '_ops', '_text_format', 'custom_op']
>>> _custom_op_module.OP_LIST
op {
name: "CustomOp"
...
}
>>>
有没有人有类似的问题?我们可以认为这是一个错误吗?
答案 0 :(得分:0)
显然,重新编译并重新安装TF使其有效。
答案 1 :(得分:0)
当我尝试加载我的新操作时,我遇到了类似的错误消息,但是出现了类似的错误消息,但是我的问题是我尝试注册了一个具有与tensorflow相同的操作名的自定义操作,并导致了名称冲突。更改名称可以修复它,而无需重新编译TF。
我遇到的错误消息:
AttributeError: module '6e237d88703da016805889179d3f5baa' has no attribute 'custom_op'