2.6 在Jupyter中编写代码
因为TensorFlow首先是一个Python库,所以你应该充分地利用Python语言的解释器。Jupyter是一个成熟的交互式编程环境。它是一个Web应用程序,可以优雅地展示计算。你可以与其他人共享代码和注释,以传授技术或演示代码。Jupyter还可以轻松地与可视化库(如Python的Matplotlib)集成,简洁地共享数据信息并评估算法的精度,以及显示结果。
你可以与他人共享Jupyter Notebook以交换想法,你还可以下载他们的notebook以了解他们的代码。请参考附录安装Jupyter Notebook应用程序。
在命令行界面中切换路径到你练习TensorFlow代码的位置,并启动notebook服务:
运行此命令之后,会启动一个新的Jupyter dashboard浏览器窗口。如果窗口没有自动打开,你可以从浏览器访问http://localhost:8888。你会看到一个类似图2.5所示的Web界面。
图2.5 运行Jupyter Notebook会启动一个交互式笔记本,地址为http://localhost:8888
提示 jupyter notebook
命令没起作用?确保你的PYTHONPATH
环境变量包括Jupyter的安装路径。此外,本书同时使用了Python3.7(推荐)和Python2.7(因为BregmanToolkit,你将在第7章遇到),所以你需要在启动Python kernel的情况下安装Jupyter。更多信息请参见https://ipython.readthedocs.io/en/stable/install/kernel_install.html。
通过单击右上角的“新建”下拉菜单创建一个新的notebook,然后选择Notebooks>Python 3。新的Python3启用内核是默认唯一选项,因为Python 2在2020年1月1日已弃用。这个操作创建了一个名为Untitled.ipynb的新文件,你可以立即开始通过浏览器界面编辑它。你可以通过单击当前Untitled的名字来更改文件名,并输入一些更容易记住的东西,例如TensorFlow Example Notebook。当你看到清单代码时,简单约定的命名方式是<章节号>.<编号>.ipynb(例如,Listing2.8.ipynb),但是你也可以选择你想要的任何名字。体制——谁会认为它有用呢?
Jupyter Notebook中的所有内容都是称为cell的独立代码或文本块。cell有助于将长代码块划分为可管理的代码段和文档。你可以单独运行一个cell,也可以选择同时按顺序运行所有cell。有三种常用的执行cell方法:
- 通过Shift-Enter键执行cell并高亮下一个cell。
- 通过Ctrl-Enter键执行cell并将光标保持在当前cell。
- 通过Alt-Enter键执行cell并在其下面创建一个空的cell。
你可以通过单击工具栏中的下拉菜单来修改cell的类型,如图2.6所示。或者,你可以按Esc键退出编辑模式,使用方向键选择cell,然后按Y键(Code模式)或者M键(Markdown模式)。
图2.6 下拉菜单修改笔记本中的cell类型。Code表示编写Python代码,Markdown用于描述文本
最后,你可以创建一个Jupyter Notebook,通过编辑代码和文本优雅地呈现TensorFlow代码,如图2.7所示。
练习2.3
如果你仔细观察图2.7,你会发现我们使用了tf.neg
而不是tf.negative
。这有点奇怪,你知道这是为什么吗?
答案
你应该注意TensorFlow库改变了命名约定,当你使用旧的TensorFlow教程时,你可能会遇到这些。
图2.7 交互式Python笔记本分组显示了代码和注释,便于阅读
然而,人们在使用Jupyter时最常犯的一个错误是过分地依赖它进行TensorFlow完成的复杂机器学习运算。Jupyter在Python和TensorFlow的交互上面令人愉快,但是它不适合执行长时间的训练任务,比如你编写代码,然后“fire and forget”几个小时、几天甚至几周。在这种情况下,我们建议使用Jupyter的save as Python file
功能(在文件菜单中)。然后在tmux
或者screen
里面通过命令行使用Python解释器运行保存过的Python文件。这些命令行程序允许你在退出时保持会话,并允许你返回检查命令的执行情况时将你重新置于会话中,就像从未离开过一样。这些是UNIX工具,但是通过Cygwin和虚拟机,它们也可以允许在Windows中使用。你将在后续的章节中学习到,特别是当使用TensorFlow的会话API执行分布式、multi-GPU训练时,如果你的代码仅使用Jupyter Notebook,你将遇到麻烦。notebook环境将你绑定到一个特定的运行时,可能会在无意中关闭(特别是在超级计算机上),或者在几天后冻结或锁定,因为Jupyter运行一段时间就会消耗大量的内存。
提示 定期查看Jupyter中那些正在运行(绿色)但不再需要的notebook,选择它们并单击Shutdown来释放一些内存。你的电子邮件、网页浏览器以及其他应用将会感激你!