如何阅读和学习深度学习项目代码

【前言】现在深度学习项目代码量越来越大,并且单个文件的量也非常的大。笔者总结了一些专家的经验并结合自己看的一些项目,打算总结一下如何探索和深入一个深度学习项目库。笔者pprp,未经允许不得擅自转发。

1. 基础知识

首先,需要保证有一定的深度学习基础知识,吴恩达的深度学习课还有斯坦福大学的CS231n都是不错的入门教程,只需要有大学数学的基础就可以看懂。

然后,需要对Linux系统使用有一定的了解,一般选择Ubuntu系统作为主力系统,了解一下基础的系统命令就可以了,比如rm,ls,cd,cat,vim,sudo,find,df,top等,在B站上搜索一下Linux的视频,很快就可以入门。之后遇到新的命令只需要查询API即可。

其次,还需要保证对python语言和深度学习框架的了解,python上手是很快的,可以看一下菜鸟教程或者莫烦python教程,上首页很快。深度学习框架方面可以买一些书籍,边看边敲,找一个小项目敲一敲,了解一下大部分API就已经达到上手水平了。深度学习框架一般选tensorflow、pytorch,因为大部分项目大多是基于这两个框架的。他们官方网站的教程也是非常不错的参考,可以看看官方提供的教程,跑一下github上提供的demo。

最后,营造科研的环境,可以关注一些领域相关的大牛、公众号,也可以加入一些交流群,多和群友交流,尽可能提升领域的常识。不要乱问问题,一定要有自己的思考和想法,然后再到群里问问题和交流。

2. 项目分析阅读

从Github上拿到一个项目,可以按照以下的步骤进行分析和阅读。

  • 项目背景调研:

    • 项目是否是对应一篇论文?如果对应论文,可以先阅读一下Paper,对背景和项目的细节有一个大概的了解。
    • 项目是否有说明文档?一般比较大型的项目,比如pytorch,nni,mmdetection等较多人维护的项目是会在readthedoc上提供说明书,建议优先阅读说明。
    • 项目是否有README?README文件通常包含了项目创建者想要告诉你的信息,对于一些专业的项目库而言,阅读README文件绝对对你理解整个项目代码有帮助。
    • 什么都没有??极少数会遇到这种情况,但如果遇到的话,就进行下一个阶段吧。
  • 通过文件命名分析:

    • 根据文件夹、文件的命名,判断其可能的功能。一般在深度学习项目中,通常有几部分组成:
      • 数据处理、数据加载部分,通常命名可能有xxx_dataloader.py等
      • 网络模型构建部分,通常命名可能为 resnet20.py model.py等
      • 训练部分脚本,通常命名可能为train.py等
      • 测试部分脚本,通常命名可能为test.py eval.py 等
      • 工具库,通常命名为utils文件夹。
    • 举个例子,以once for all项目为例:
.
├── build.sh # 环境构建
├── eval_ofa_net.py
├── eval_specialized_net.py # 验证专用网络
├── figures
│   ├── cnn_imagenet_new.png
│   ├── diverse_hardware.png
│   ├── imagenet_80_acc.png
│   ├── ofa-tutorial.jpg
│   ├── overview.png
│   └── video_figure.png
├── LICENSE
├── ofa 
│   ├── imagenet_classification 
│   │   ├── data_providers # 数据加载
│   │   ├── elastic_nn # 算法核心模块
│   │   ├── __init__.py
│   │   ├── networks # 网络构建
│   │   └── run_manager # 训练代码核心逻辑
│   ├── __init__.py
│   ├── model_zoo.py # 模型库
│   ├── nas # nas相关工具
│   │   ├── accuracy_predictor
│   │   ├── efficiency_predictor
│   │   ├── __init__.py
│   │   └── search_algorithm
│   ├── tutorial # 教程
│   │   ├── accuracy_predictor.py
│   │   ├── evolution_finder.py
│   │   ├── flops_table.py
│   │   ├── imagenet_eval_helper.py
│   │   ├── __init__.py
│   │   └── latency_table.py
│   └── utils # 工具库
│       ├── common_tools.py
│       ├── flops_counter.py
│       ├── __init__.py
│       ├── layers.py
│       ├── my_dataloader
│       ├── my_modules.py
│       ├── pytorch_modules.py
│       └── pytorch_utils.py
├── README.md # 项目介绍,初次接触需要阅读
├── requirements.txt # 环境文件
├── setup.py # pip构建环境所需文件
├── train_ofa_net.py # 训练脚本
└── tutorial # 教程
    ├── local_lut.npy
    ├── ofa.ipynb
    ├── ofa_resnet50_example.ipynb
    └── README.md

  • 找到程序运行入口:
    • 通过上一步的分析,找到了项目的介绍的话,在自己机器上完成环境配置。
    • 一般可以找到项目运行的主入口,比如train.py,试着运行项目。
    • 遇见bug怎么办?
      • 第一类bug,环境不兼容导致的bug,严格按照作者提供的运行环境,并对照环境的版本信息,对齐本地环境和作者要求的环境。
      • 第二类bug,深度学习框架带来的bug,这部分bug可以在bing上进行搜索,查看解决方案。
      • 第三类bug,项目本身相关的bug,这类bug最好是在github的issue区域进行查找,如果无法解决可以在issue部分详细描述自己的问题,等待项目库作者的解答。
    • 运行顺利的话,代表可以进行debug操作,对文件某些细节不确定的话,可以通过debug的方式查看变量详细内容。
  • 用IDE打开项目:
    • 笔者是vscode党,推荐使用vscode+scp+mobaxterm+远程服务器的方式进行运行。
    • 打开项目以后,从运行入口(通常是train.py)开始阅读:
      • 阅读入口文件的逻辑,查看调用到了哪些包。
      • 通过IDE的功能跳转到对应类或者函数进行继续阅读,配合代码注释进行分析。
      • 分析过程可能会需要软件工程的知识,比如画一个类图来表述项目的关系。
      • 一开始可以泛读,大概了解整体流程,做一些代码注释。而后可以精读,找到文章的核心,反复理解核心实现,抽丝剥茧,一定可以对这个项目有进一步的理解。
  • 实在读不懂怎么办?
    • 在Github的issue上进行提问。
    • 如果有项目作者的联系方式,可以联系作者,发邮件提问。
    • 看看有没有其他人写过相关的博客。

参考

https://www.zhihu.com/question/26480537

https://www.zhihu.com/question/29416073/answer/44301979

https://github.com/phodal/articles/issues/14

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容