23.1. 使用Jupyter Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 SageMaker Studio Lab 中打开 Notebook

本节介绍如何使用Jupyter Notebook编辑和运行本书中各节的代码。请确保已按照 安装 中的说明安装了Jupyter并下载了代码。如果你想了解更多关于Jupyter的信息,可以参考其文档中的优秀教程。

23.1.1. 在本地编辑和运行代码

假设本书代码的本地路径是 xx/yy/d2l-en/。使用shell将目录更改到此路径(cd xx/yy/d2l-en)并运行命令 jupyter notebook。如果你的浏览器没有自动执行此操作,请打开 https://:8888,你将看到Jupyter的界面和包含本书代码的所有文件夹,如 图 23.1.1 所示。

../_images/jupyter00.png

图 23.1.1 包含本书代码的文件夹。

你可以通过单击网页上显示的文件夹来访问notebook文件。它们通常以后缀“.ipynb”结尾。为简洁起见,我们创建一个临时的“test.ipynb”文件。单击它后显示的内容如 图 23.1.2 所示。此notebook包含一个markdown单元格和一个代码单元格。markdown单元格中的内容包括“This Is a Title”和“This is text.”。代码单元格包含两行Python代码。

../_images/jupyter01.png

图 23.1.2 “text.ipynb”文件中的Markdown和代码单元格。

双击markdown单元格进入编辑模式。在单元格末尾添加一个新的文本字符串“Hello world.”,如 图 23.1.3 所示。

../_images/jupyter02.png

图 23.1.3 编辑markdown单元格。

图 23.1.4 所示,在菜单栏中单击“Cell” \(\rightarrow\) “Run Cells”以运行编辑后的单元格。

../_images/jupyter03.png

图 23.1.4 运行单元格。

运行后,markdown单元格如 图 23.1.5 所示。

../_images/jupyter04.png

图 23.1.5 运行后的markdown单元格。

接下来,单击代码单元格。在代码的最后一行之后将元素乘以2,如 图 23.1.6 所示。

../_images/jupyter05.png

图 23.1.6 编辑代码单元格。

你也可以使用快捷键(默认为“Ctrl + Enter”)运行单元格,并从 图 23.1.7 中获取输出结果。

../_images/jupyter06.png

图 23.1.7 运行代码单元格以获取输出。

当一个notebook包含更多单元格时,我们可以单击菜单栏中的“Kernel” \(\rightarrow\) “Restart & Run All”来运行整个notebook中的所有单元格。通过单击菜单栏中的“Help” \(\rightarrow\) “Edit Keyboard Shortcuts”,你可以根据自己的喜好编辑快捷键。

23.1.2. 高级选项

除了本地编辑,有两件事非常重要:用markdown格式编辑notebook和远程运行Jupyter。当想在更快的服务器上运行代码时,后者很重要。前者很重要,因为Jupyter的原生ipynb格式存储了大量与内容无关的辅助数据,主要与代码的运行方式和位置有关。这对Git来说是混乱的,使得审查贡献非常困难。幸运的是,还有另一种选择——用markdown格式进行原生编辑。

23.1.2.1. Jupyter中的Markdown文件

如果你希望为本书的内容做出贡献,你需要修改GitHub上的源文件(md文件,而不是ipynb文件)。使用notedown插件,我们可以直接在Jupyter中修改md格式的notebook。

首先,安装notedown插件,运行Jupyter Notebook,并加载插件:

pip install d2l-notedown  # You may need to uninstall the original notedown.
jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager'

你也可以在每次运行Jupyter Notebook时默认开启notedown插件。首先,生成一个Jupyter Notebook配置文件(如果已经生成,可以跳过此步)。

jupyter notebook --generate-config

然后,将以下行添加到Jupyter Notebook配置文件的末尾(对于Linux或macOS,通常在路径 ~/.jupyter/jupyter_notebook_config.py 中):

c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'

之后,你只需要运行 jupyter notebook 命令即可默认开启notedown插件。

23.1.2.2. 在远程服务器上运行Jupyter Notebook

有时,你可能想在远程服务器上运行Jupyter notebook,并通过本地计算机上的浏览器访问它。如果你的本地机器上安装了Linux或macOS(Windows也可以通过PuTTY等第三方软件支持此功能),你可以使用端口转发:

ssh myserver -L 8888:localhost:8888

上面的字符串 myserver 是远程服务器的地址。然后我们可以使用 https://:8888 来访问运行Jupyter notebook的远程服务器 myserver。我们将在本附录的后面详细介绍如何在AWS实例上运行Jupyter notebook。

23.1.2.3. 计时

我们可以使用 ExecuteTime 插件来为Jupyter notebook中每个代码单元格的执行计时。使用以下命令安装插件:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable execute_time/ExecuteTime

23.1.3. 小结

  • 使用Jupyter Notebook工具,我们可以编辑、运行和贡献本书的每一节内容。

  • 我们可以使用端口转发在远程服务器上运行Jupyter notebook。

23.1.4. 练习

  1. 在你的本地计算机上使用Jupyter Notebook编辑和运行本书中的代码。

  2. 通过端口转发,使用Jupyter Notebook远程编辑和运行本书中的代码。

  3. 对于 \(\mathbb{R}^{1024 \times 1024}\) 中的两个方阵,比较运算 \(\mathbf{A}^\top \mathbf{B}\)\(\mathbf{A} \mathbf{B}\) 的运行时间。哪一个更快?

讨论