如何在 jupyter notebook 中使用 MathJax 显示图形?

数据挖掘 神经网络 可视化 朱庇特
2021-10-04 16:28:25

我正在尝试创建一个带有神经网络图形描述的 jupyter 笔记本。对于初学者,我试图展示一个简单的网络来评估布尔 NOT 运算符。

我正在使用https://metakernel.readthedocs.io/en/latest/source/README.html?v=20190725125340#id13%%dot中记录的单元格魔法,并且我的笔记本中有一个代码单元格,其中包含以下内容:

%%dot
digraph NOT {
  rankdir = LR
  node [shape="circle"]
  x0 [label="+1"]
  x1 [label="$x_1$"]
  h [shape="plain"]
  y1 [color="coral" label=""]
  x0 -> y1 [label="10"]
  x1 -> y1 [label="-20"]
  y1 -> h [label="g()"]
}

这被渲染成一个 SVG,显示为代码单元的输出。但是,对于我使用的 x1 节点上的标签$x_1$,我想将其呈现为x1(大概是由 MathJax 编写的,就像在 Markdown 单元格中所做的那样)。不幸的是,我只是得到一个没有标签的空白节点,如下所示:

NOT 的神经网络配置图

知道我能做些什么来解决这个问题吗?

1个回答

我最终创造了一种基于魔法的新魔法%dot,名为%dotMJ. 它的工作原理是在 SVG 中查找<text>对象(对应于 GV 中的标签),检查它们是否是 LaTeX 代码(以 开始/结束$),如果是,则将它们转换为 a<div>并用<foreignObject>. 这允许 MathJax “看到” LaTeX 代码并将其适当地转换以供显示。

源代码位于:https ://gitlab.com/jello/ML-Notebooks/blob/master/dotMJ_magic.py