第一讲-如何在Jupyterhub运行和调试ProtoPNet的简明学习版本

简介

本文介绍原开源仓库ProtoPNet的一个简化后的学习版本。 开源仓库ProtoPNet是由论文《This Looks Like That: Deep Learning for Interpretable Image Recognition》的作者提供的ProtoPNet的一种python实现。但是,如果要运行该仓库,论文作者推荐硬件配置是 4 NVIDIA Telsa P-100 GPUs,或者8 NVIDIA Tesla K-80 GPUs. 但是,这对于刚进入ML/AI领域的读者来说,该硬件配置要求太高。

本文介绍的简明学习版本是对原完整仓库的简化,目的是方便刚进入ML/AI领域的读者学习该AI算法;简化后的代码可以在纯CPU上环境上运行、调试,读者可以把每一行代码和原论文的算法描述仔细对比、交叉验证,从而熟练掌握算法原理,为以后进一步快速迁移到GPU环境运行打好基础。

本文是以上主题的第一讲:如何在AcdEvent提供的Jupyterhub运行、调试该ProtoPNet的学习版本。

使用AcdEvent提供的Jupyterhub运行、调试ProtoPNet的学习版本

感兴趣的读者可以访问 Academic Simulation Hub 在网页底部的’Comment’留言“我申请学习ProtoPNet”。申请成功后,将免费获得登录账号和密码。

获得账号和密码的读者,可以继续访问 Acdevent’s Jupyterhub, 使用账号和密码登录Academic Simulation Hub(如图 1)。

../../_images/figure01.png

图 1 登录Academic Simulation Hub

成功登录Academic Simulation Hub后,就可以看到如图 2的登录ProtoPNet简明学习版本的界面。左边是工作空间,右边是Launcher(目前暂时不用)。工作空间下有一个名字为codes的目录。

../../_images/figure02.png

图 2 登录ProtoPNet简明学习版本的界面

双击进入codes目录,可以看到ProtoPNet的工程目录(如图 3)。

../../_images/figure03.png

图 3 ProtoPNet的工程目录

继续双击进入ProtoPNet目录,可以看到若干的子目录和文件(如图 4)。

../../_images/figure04.png

图 4 ProtoPNet目录下的子目录和文件

其中:

  • datasets, pretrained_modelssaved_models 是已经提前准备好的训练和测试数据集、预训练模型,和临时保存的文件,当前可以不关注。

  • LICENSE - MIT license

  • poster.pdf, slides.pdf, supp_this_looks_like_that.pdfthis_looks_like_that.pdf : 它们是原完整仓库所实现的prototypical part network (ProtoPNet)的论文。

  • main.ipynb - 这就是简化后的ProtoPNet的实验版本。它使用jupyter notebook作为运行环境;运行所需要的python library和package等都已经在云端配置好。读者只需要在线打开该main.ipynb,就可以阅读代码、设置断点并运行、调试,查看中间变量,验证想法,对比原论文的算法细节等。

在开始阅读代码之前,先介绍怎么使用jupyter notebook debugger的调试功能来设置断点和观察中间变量的结果等。

双击打开main.ipynb, 然后点击打开最右边的Debugger图标(如图 5):

../../_images/figure05.png

图 5 打开Debugger

然后再找到中间偏右的地方的’Enable Debugger’图标(如图 6)并点击; 等待该图标变成红色,代表已经成功Enable Debugger了(如图 7)。

../../_images/figure06.png

图 6 点击Enable Debugger图标

../../_images/figure07.png

图 7 成功Enable Debugger后的图标状态

然后在main.ipynb的第一行的开头点击,添加第一个断点(如图 8):

../../_images/figure08.png

图 8 在第一行设置断点

点击如图 9所示的右向三角形图标,运行该notebook的第一个cell单元,然后等待第一行的背景变灰,这说明程序程序运行到了第一行的断点处。

../../_images/figure09.png

图 9 运行所选择的一个单元

然后,可以在右边的Debugger窗口中,可以选择Continue, Terminate, Next, Step In, Step-Out来调试;以及Evaluate Code来计算、打印中间结果(如图 10)。

../../_images/figure10.png

图 10 可以选择继续、终止、下一步、进入函数、退出函数、执行表达式等

这里选择Terminate来结束这一次调试,并双击第一行取消该行的断点(如图 11)。

../../_images/figure11.png

图 11选择终止调试和取消断点

然后来到main.ipynb的第八个单元的 def foward(self, x)函数,并点击该函数的第一行,来添加一个新断点(如图 12):

../../_images/figure12.png

图 12 添加新断点

然后选择notebook的菜单中的Run→Run All Cells (如图 13),从头开始运行main.ipynb.

../../_images/figure13.png

图 13 选择Run All Cells

如果一切正常,那么程序就会在刚才设置的断点处暂停(如图 14):

../../_images/figure14.png

图 14 在新断点处暂停

然后就可以在Debugger的窗口查看VARIABLES, CALLSTACKS等(如图 15)

../../_images/figure15.png

图 15 在Debugger窗口查看变量、调用栈等

也可以使用如图 16和图 17中的CALLSTACKS中的“Evaluate Code”来打印变量(例如Tensor x)的值:

../../_images/figure16.png

图 16使用Evaluation Code的示例-1

../../_images/figure17.png

图 17使用Evaluation Code的示例-2

打印出来的结果在main.ipynb的最后显示(如图 18):

../../_images/figure18.png

图 18 查看Evaluation Code的输出结果

如果在以上的操作遇到问题,例如“点击运行按钮过一段时间后程序没有响应”,那么可以重启kernel(如图 19),然后重新点击运行按钮

../../_images/figure19.png

图 19 重启kernel

以上的本讲的内容。下一讲将讲解论文算法原理,并和代码对比和交叉验证。

参考

  1. ProtoPNet的原完整仓库 https://github.com/cfchen-duke/ProtoPNet

  2. Academic Simulation Hub from AcdEvent.com , https://acdevent.com/simulation.html