2017-09-06 52 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' –