2017-06-19 35 views
3

我試圖修改Tensorflow源代碼(核心)。修改張量流源的最佳實踐

研究完代碼之後,我開始修改,重新編譯並運行我自己的測試。但我不確定我是否以最好的方式做到這一點。所以我有一些關於它的問題。

1 - 我是否需要重新編譯所有tensorflow代碼或只修改模塊?

2 - 爲了實施修改,我是否始終從我的資源創建一個輪包並進行安裝?爲什麼我可以在bazel編譯後直接整合修改?

3 - 什麼是測試代碼的最佳方式?有很多單元測試,我不知道如何正確使用它。

4 - 我使用bash腳本來運行bazel命令,有更好的東西嗎?

謝謝大家!

+1

曾經有一個名爲'爲發展建立tensorflow'的部分,它提供了一種修改TF並在不需要安裝輪子的情況下使用它的方法。不知道它在哪裏,我看到舊版本在https://github.com/orionr/tensorflow/blob/6666bd9355d4d69ef7​​3e9fda95dff262055fbb84/tensorflow/g3doc/get_started/os_setup.md –

+0

您是否正在修改Python或C++? –

+0

我正在修改C++核心,並用C++和python運行應用程序。我認爲python總是使用C++核心和內核來做計算的東西。 – plotbot

回答

2

(從有關問題的評論總結)沒有必要建立一個PIP封裝TensorFlow同時發展變化TensorFlow本身。相反,bazel run <target>可讓您運行單元測試(bazel test將一個或多個測試的輸出記錄到文件而不是直接打印)。因此,舉例來說,如果你正在修改的一個熱點OP(tensorflow/core/kernels/one_hot_op.cc),您可能需要運行該OP Python的單元測試套裝(tensorflow/python/kernel_tests/one_hot_op_test.py):

bazel run //tensorflow/python/kernel_tests:one_hot_op_test 

或者進入目錄,並使用相對的構建目標:

cd python/kernel_tests 
bazel run :one_hot_op_test 

測試目標在BUILD文件中定義。應該自動選取對依賴關係的任何更改。第一次運行後,編譯應該很快,因爲大部分都會被緩存。

如果您正在開發將最終整合到使用TensorFlow的軟件中的更改,那麼如果您在開始進行集成測試之前首先單元測試TensorFlow更改,則可能會更愉快,將TensorFlow捆綁到一個pip包中)。