Jupyter Notebook神经网络教程图表绘制可行方案咨询
神经网络教程Jupyter Notebook图表绘制方案
问题背景
我正在制作一份神经网络教程的.ipynb文件,需要添加图表。目前采用手绘后iPhone拍照转成.png,通过插入Markdown单元格,但存在以下问题:
- 分发笔记本时需附带大量媒体文件
- 修改图表需重新绘制
- 外观粗糙
尝试过两种方案但均未成功:
- LaTeX TikZ绘制:VSCode的.ipynb渲染器支持基础LaTeX公式(如$x^2 + y^2$),但使用tikzpicture代码时出现「ParseError: no such environment: tikzpicture」错误,推测需安装
ipython-tikzmagic,但不想让学生额外安装依赖。
测试代码:\begin{tikzpicture}[x=1.5cm, y=1.5cm, >=stealth] \draw[->] (-0.5,0) -- (4.5,0) node[right] {$x_1, x_2, \dots, x_N$}; \draw[->] (0,-0.5) -- (0,2.5); \foreach \i in {1,2,...,4} { \filldraw[black] (\i,0) circle (0.1); } \draw[black, ->] (2,-0.3) -- (2,0.3); \draw[black, ->] (2,0.3) -- (2,1.7) node[above] {$\sum_{i=1}^{N}w_ix_i + b$}; \draw[black, ->] (2,1.7) -- (2,2.2) node[above] {$\sigma(\cdot)$}; \draw[->] (2,2.2) -- (4.5,2.2) node[right] {Output}; \end{tikzpicture} - Graphviz:执行
brew install graphviz和pip install graphviz后可在Python单元格运行代码,但无法渲染LaTeX标签,且不能在Markdown单元格中直接使用。
测试代码:import graphviz as gv dot = gv.Digraph() dot.edge("X6", "X7", label="$\sigma(\cdot)$") dot
需求:寻找无需学生额外安装的开箱即用方案;若无,推荐可行的实现路径。
一、开箱即用方案(无需学生额外安装)
1. Matplotlib绘制(支持LaTeX,默认预装)
Matplotlib是Jupyter Notebook默认预装的库,学生无需额外安装,支持完整LaTeX公式渲染,直接在Python单元格生成嵌入式图表,修改参数即可调整样式,无需外部文件。
示例代码(对应单层感知机流程):
import matplotlib.pyplot as plt # 开启LaTeX支持 plt.rcParams.update({ "text.usetex": True, "font.family": "serif" }) fig, ax = plt.subplots(figsize=(8, 4)) # 绘制输入节点 input_nodes = [(1,0), (2,0), (3,0), (4,0)] for x, y in input_nodes: ax.scatter(x, y, s=200, c='black', zorder=5) # 绘制坐标轴与标注 ax.arrow(-0.5, 0, 5, 0, head_width=0.1, head_length=0.2, fc='black', ec='black') ax.arrow(0, -0.5, 0, 3, head_width=0.1, head_length=0.2, fc='black', ec='black') ax.text(4.8, 0, '$x_1, x_2, \\dots, x_N$', fontsize=12) # 绘制计算流程箭头与标注 ax.arrow(2, -0.3, 0, 0.6, head_width=0.1, head_length=0.1, fc='black', ec='black') ax.text(2.2, 0.7, '$\\sum_{i=1}^{N}w_ix_i + b$', fontsize=12) ax.arrow(2, 1, 0, 0.7, head_width=0.1, head_length=0.1, fc='black', ec='black') ax.text(2.2, 1.8, '$\\sigma(\\cdot)$', fontsize=12) ax.arrow(2, 2.2, 2.5, 0, head_width=0.1, head_length=0.2, fc='black', ec='black') ax.text(4.8, 2.2, 'Output', fontsize=12) # 隐藏边框与刻度,优化视觉效果 ax.spines[['top', 'right', 'left', 'bottom']].set_visible(False) ax.set_xticks([]) ax.set_yticks([]) plt.tight_layout() plt.show()
2. Mermaid(Markdown单元格原生支持)
Jupyter Lab 3.0+、VSCode的Jupyter插件等环境原生支持Mermaid语法,可直接在Markdown单元格编写,无需依赖安装,支持基础公式标注(部分环境支持LaTeX语法)。
示例代码(对应你的图表逻辑):
graph LR subgraph 输入层 X1((x₁)) X2((x₂)) X3((x₃)) X4((x₄)) end 输入层 -->|$\sum_{i=1}^{N}w_ix_i + b$| 计算节点 计算节点 -->|$\sigma(\cdot)$| 输出节点 输出节点 --> Output[Output]
若LaTeX渲染异常,可更新VSCode的Jupyter插件至最新版本,或使用简化的文本标注替代。
二、备选实现路径(需少量前置操作)
1. 预渲染TikZ为SVG嵌入
你可在本地安装ipython-tikzmagic,或使用在线TikZ编辑器将图表渲染为SVG文件,然后将SVG代码直接复制到Markdown单元格中(SVG为纯文本,无需附带外部文件),学生打开笔记本即可直接查看。
2. 机器学习框架可视化工具
若需绘制复杂神经网络结构,可使用torchviz(PyTorch)或tensorboard(TensorFlow),这类工具通常是机器学习教程的标配依赖,学生大概率已安装。
示例(torchviz生成计算图):
import torch from torchviz import make_dot # 定义简单模型 x = torch.randn(1, 4) linear = torch.nn.Linear(4, 1) sig = torch.nn.Sigmoid() y = sig(linear(x)) # 生成并显示计算图 make_dot(y, params=dict(linear.named_parameters()))
内容的提问来源于stack exchange,提问作者P i
相关产品推荐
相关产品推荐

