本节摘要:Notebook(笔记本)是 AI 工程的实验台——你在它上面做原型,把跑得通的部分搬进生产。每一篇 AI 论文、每一个教程、每一场 Kaggle 比赛都用 Jupyter:它能让你分段运行代码、把输出直接嵌在代码下方、把代码与说明文字混排、迭代极快。没有 Notebook 学 AI,就像做数学题不用草稿纸。但 Notebook 也有真实的坑——人们把它用在所有场景,包括它极不擅长的那些。本节帮你吃透 Notebook 的本质(一个由单元格与后台 Kernel 组成的交互环境)、必备的快捷键与魔法命令(
%timeit、%%time、%matplotlib inline)、与 Google Colab 的差异,以及三条核心心法:「在 Notebook 里探索,在脚本里发布」、规避乱序执行与隐藏状态这两大陷阱。
对应原课程:Phase 00 · Lesson 05 ·
jupyter-notebooks(原英文phases/00-setup-and-tooling/05-jupyter-notebooks/docs/en.md)。前置:第 01 节「开发环境」。
阅读完本节,你应当能够:
%timeit、%%time、%matplotlib inline)做基准测试与内联可视化。每一篇 AI 论文、每一个教程、每一场 Kaggle 比赛都用 Jupyter Notebook。它让你分段运行代码、看到内联输出、把代码与解释混排、快速迭代。不用 Notebook 学 AI,等于做数学题不用草稿纸。
但 Notebook 有真实的坑。人们把它用在所有地方,包括它极不擅长的场景。知道何时用 Notebook、何时用脚本,能让你免于日后调试噩梦。
一个 Notebook 就是一串单元格(Cell),每个单元格要么是代码,要么是 Markdown 文本:
Kernel(内核) 是一个跑在后台的 Python 进程。你运行一个单元格时,代码被送到 Kernel,Kernel 执行后把结果送回来。所有单元格共享同一个 Kernel,所以变量在单元格之间持久存在。
「按你点击的任意顺序执行」这一条,既是 Notebook 的超能力,也是它的扳机。
💡 心智模型:Notebook = 带内存的状态机 + 一堆可单独运行的代码块。Kernel 是状态,单元格是动作。状态在,变量就在;Kernel 重启,一切归零。
三种界面,同一份 .ipynb 文件格式,挑顺手的那个:
| 界面 | 安装/启动 | 最适合 |
|---|---|---|
| JupyterLab | pip install jupyterlab 后 jupyter lab |
完整 IDE 体验,多标签、文件浏览器、终端 |
| Jupyter Notebook | pip install notebook 后 jupyter notebook |
简洁轻量,一次一个 notebook |
| VS Code | 装「Jupyter」扩展 | 已在你的编辑器里,集成 Git 与调试 |
AI 工作里 JupyterLab 最常见:
pip install jupyterlab jupyter lab
你工作在两种模式下:按 Esc 进命令模式(左侧蓝条),按 Enter 进编辑模式(左侧绿条)。
命令模式(最常用):
| 键 | 动作 |
|---|---|
Shift+Enter |
运行单元格,跳到下一个 |
A |
上方插入单元格 |
B |
下方插入单元格 |
DD |
删除单元格 |
M |
转 Markdown |
Y |
转代码 |
Z |
撤销单元格操作 |
Ctrl+Shift+H |
显示所有快捷键 |
Shift+Enter 是你一天会用上千次的那个,先记它。编辑模式下,Tab 自动补全,Shift+Tab 显示函数签名,Ctrl+/ 切换注释。
代码单元格跑 Python 并显示输出:
import numpy as np data = np.random.randn(1000) data.mean(), data.std() # 输出: (0.0032, 0.9987)
Markdown 单元格渲染格式化文本,用来记录你在做什么、为什么这么做。支持标题、加粗、斜体、LaTeX 数学($E = mc^2$)、表格、图片。
设计要点:好 Notebook 的 Markdown 与代码比应接近 1:1。一年后回看,光看 Markdown 就能想起整段实验的来龙去脉——这是 Notebook 相对于裸脚本的最大优势。
这些不是 Python,是 Jupyter 专属命令,以 %(行魔法)或 %%(单元格魔法)开头。
计时:
%timeit np.random.randn(10000) # 跑多次取平均,适合微基准 # 输出: 45.2 us +/- 1.3 us per loop %%time model.fit(X_train, y_train, epochs=10) # 只跑一次,适合训练 # 输出: Wall time: 2.34 s
%timeit 跑多次取平均,%%time 只跑一次。微基准用 %timeit,训练用 %%time。
内联图表:%matplotlib inline 之后,所有 plt.plot() 直接嵌在单元格下方渲染。
不离开 Notebook 装包:!pip install scikit-learn,前缀 ! 表示跑 shell 命令。
查看环境变量:%env CUDA_VISIBLE_DEVICES。
Notebook 会自动显示单元格最后一个表达式。你能控制它:
import pandas as pd df = pd.DataFrame({"model": ["Linear","RF","NN"], "accuracy": [0.72, 0.89, 0.94]}) df # 渲染成格式化 HTML 表格,而非纯文本 dump
图表同理:
import matplotlib.pyplot as plt plt.plot([1,2,3,4], [1,4,2,3]); plt.show() # 图表直接出现在单元格下方
这就是 Notebook 统治 AI 工作的原因——数据、图表、代码同框呈现。图片还能用 IPython.display.Image 内联显示。
Colab 是云端的免费 Jupyter,自带 GPU、预装库、Google Drive 集成,零配置。上传本课程任意 .ipynb 文件,「运行时 → 更改运行时类型 → T4 GPU」即可。
与本地 Jupyter 的差异:
from google.colab import drive; drive.mount('/content/drive') 挂载持久存储。| 用 Notebook | 用脚本 |
|---|---|
| 探索数据集 | 训练流水线 |
| 给模型做原型 | 可复用工具 |
| 可视化结果 | 任何带 if __name__ 的代码 |
| 解释你的工作 | 定时调度的代码 |
| 快速实验 | 生产代码 |
| 课程练习 | 包与库 |
铁律:在 Notebook 里探索,在脚本里发布。
典型 AI 工作流:
.py 文件。import 那些 .py 文件继续实验。💡 第 4 步是关键:把稳定的部分沉淀成模块,Notebook 只保留「探索性」的代码。这样既享受了交互性,又规避了 Notebook 难维护的缺点。
本节产出(原课程 outputs/):
prompt-notebook-helper.md:一个提示词,把你遇到的 Notebook 问题(乱序执行、Kernel 卡死、变量莫名消失、内存爆掉)贴进去,让 AI 助手帮你定位根因并给出修复步骤。%timeit 对比「列表推导式」与「NumPy」生成 10 万个随机数的耗时差异。code/notebook_tips.py 的代码贴进 Colab,挂载 Drive 持久化一个训练好的小模型,断开会话后重新连上并加载它;再写一段在本地 Jupyter 里复现同样流程的代码,体感两种环境的差异。.ipynb。%timeit 微基准、%%time 训练计时、%matplotlib inline 内联图、!cmd 跑 shell。.py,Notebook 只留探索性部分。del + gc.collect())。下一节,我们将进入「Python 环境」——把 Notebook 与脚本背后的依赖管理做扎实,保证任意机器上都能复现同一套 Python 运行环境。