2017-06-19 32 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包中)。