热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TensorFlow源代码调试与修改VScode

TensorFlow是目前使用最广泛的深度学习框架,网上关于如何进行TensorFlow编程的教程或者博客比比皆是。然而,对于那些希望了解TensorFlow内部如何实现,或者是希

TensorFlow是目前使用最广泛的深度学习框架,网上关于如何进行TensorFlow编程的教程或者博客比比皆是。然而,对于那些希望了解TensorFlow内部如何实现,或者是希望自定义修改TensorFlow内核的朋友来说,搜索相关的内容却很难找到有帮助的教程或者博客,不论是中文还是外文。笔者去年花费好几个月对如何调试TensorFlow源代码,再到如何修改TensorFlow内核C++库文件,最后自定义TensorFlow内部的Tensor形状以及卷积模式,较熟悉如何进行TensorFlow的源代码调试与修改。本文将介绍如何对TensorFlow进行调试,进而便于有需要的朋友进行内核(C++)的学习与修改。
网上有少许关于如何调试TensorFlow源代码的文章,有的推荐直接用gdb,有的推荐用Emacs+gdb,有的推荐用codeblock的,笔者通过实验发现VS code是可视化做的最好的,而且用户界面友好,调试不会出现卡顿。Emacs在调试时随着追踪的深入会卡顿;而单纯用gdb…可能适合于linux大佬;codeblock用户界面不及VS code,而且笔者尝试调试没有成功…。

一:准备工作:

  1. 首先安装VS code,python,gcc,bazel等必要库。
  2. 然后git下载TensorFlow的源代码并check out出自己需要的版本。对源代码进行configure,根据是否有GPU而进行相应选择。这里需要注意:TensorFlow的版本必须要和本机的python,gcc,bazel版本相匹配,建议提前想好再安装所有库文件。
  3. 在configure源文件之后,我们需要用bazel对TensorFlow源代码进行编译。以CPU为例,编译命令为:bazel build –spawn_strategy=standalone –verbose_failures –local_resources 11048,2.0,2.0 -c dbg –copt -g //tensorflow/tools/pip_package:build_pip_package

二:代码调试:

  1. 打开VS code并打开TensorFlow源代码根目录。然后在根目录创建.vscode文件夹。然后创建launch.json文件。文件内容如下:
    《TensorFlow 源代码 调试 与 修改 VScode》其中的program:选项代表的是你所要调试的文件,这里我们选择TensorFlow自带的conv_ops_test文件。
  2. 任务完成,现在就可以到conv_ops_test.cc文件当中设置断点并开始追踪啦。

二:代码修改:

  1. 对于希望修改TensorFlow源代码的朋友,因为已经知道如何调试了,剩下的就是在自己希望修改的地方添加断点,然后追踪代码,进而修改并查看修改后对相应操作(卷积,池化等等)的影响。TensorFlow内部C++代码量很大,核心内容主要在core/kernel目录下,定义了前向传播与反向传播的相关函数。此外,在core/kernel目录下,TensorFlow同时定义了一些测试函数,比如对特定的卷积与池化的测试函数等等,我们也可以通过修改相应的测试函数来对修改后的代码进行测试。由于TensorFlow多数很多底层的矩阵操作都是调用第三方库文件的,所以需要引入第三方库文件的源码才能进行部分自定义功能的实现。
  2. 对于希望添加自定义OP的朋友,可以选择在TensorFlow现有的基础上添加自定义OP,官网上有相应教程。我个人更推荐基于TensorFlow提供的examples进行修改,这样就不用自己定义一系列麻烦操作。

三:更多内容:
为了方便需要理解TensorFlow内核,以及希望自定义OP或者修改TensorFlow源代码的朋友,我录制了一期在线课程,课程中除了讲述如何调试源代码,同时还涵盖了如何自定义TensorFlow当中的卷积操作(基于Eigen library)。课程不会讲解TensorFlow各个模块都做什么的概念性介绍,而是以具体的实例讲解如何调试,如何修改源代码。
自己花费了很多时间来学习如何对TensorFlow源代码进行调试与修改,课程中也会附带自己遇到的问题以及解决方法的笔记,如何你想修改TensorFlow源代码,相信可以节省几周甚至几个月的探索时间:https://edu.csdn.net/course/detail/28880


推荐阅读
author-avatar
雪恝1988_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有