Project Icon

ManimML

机器学习概念动画可视化工具

ManimML是基于Manim社区库开发的开源项目,旨在为机器学习概念提供动画和可视化。该工具提供了丰富的基础可视化组件,可以轻松创建复杂机器学习概念的视频演示。ManimML支持可视化前馈神经网络、卷积神经网络、最大池化和激活函数等,并能生成前向传播动画。通过提供高级抽象,ManimML让用户能专注于内容解释而非编程细节,是机器学习教育和交流的实用工具。

ManimML

GitHub license GitHub tag Downloads

ManimML是一个专注于使用Manim社区库提供常见机器学习概念动画和可视化的项目。请查看我们的论文。我们希望这个项目成为一个基本可视化的集合,可以轻松组合以创建复杂机器学习概念的视频。此外,我们希望提供一套抽象,让用户能够专注于解释而不是软件工程。

一个预览...

目录

入门

安装

首先你需要安装manim。确保安装的是Manim社区版,而不是原始的3Blue1Brown Manim版本。

然后从源代码安装包或使用pip install manim_ml。注意:某些最新功能可能只有从源代码安装才能使用。

第一个神经网络

这是一个卷积神经网络的可视化。生成这个可视化所需的代码如下所示。

from manim import *

from manim_ml.neural_network import Convolutional2DLayer, FeedForwardLayer, NeuralNetwork

# 这会改变我们渲染视频的分辨率
config.pixel_height = 700
config.pixel_width = 1900
config.frame_height = 7.0
config.frame_width = 7.0

# 这里我们定义了基本场景
class BasicScene(ThreeDScene):

    # 生成场景的代码在这里
    def construct(self):
        # 创建神经网络
        nn = NeuralNetwork([
                Convolutional2DLayer(1, 7, 3, filter_spacing=0.32),
                Convolutional2DLayer(3, 5, 3, filter_spacing=0.32),
                Convolutional2DLayer(5, 3, 3, filter_spacing=0.18),
                FeedForwardLayer(3),
                FeedForwardLayer(3),
            ],
            layer_spacing=0.25,
        )
        # 将神经网络居中
        nn.move_to(ORIGIN)
        self.add(nn)
        # 创建前向传播动画
        forward_pass = nn.make_forward_pass_animation()
        # 播放动画
        self.play(forward_pass)

你可以将上述代码复制到名为example.py的文件中,然后在命令行中运行以下命令(假设一切安装正确)来生成上面的视频:

$ manim -pql example.py

上述命令生成低分辨率的渲染,你可以通过运行以下命令来提高分辨率(但会降低渲染速度):

$ manim -pqh example.py

指南

这是一个更深入的指南,展示如何使用ManimML的各种功能(注意:ManimML仍在开发中,某些功能可能会变化,文档也还不完善)。

设置场景

在Manim中,所有的可视化和动画都属于一个Scene。你可以通过扩展Scene类或ThreeDScene类(如果你的动画包含3D内容,就像我们的示例一样)来创建一个场景。将以下代码添加到名为example.py的Python模块中。

from manim import *
# 在这里导入模块

class BasicScene(ThreeDScene):

    def construct(self):
        # 你的代码放在这里
        text = Text("你的第一个场景!")
        self.add(text)

为了渲染场景,我们将在命令行中运行以下命令:

$ manim -pq -l example.py

这将生成一个低质量的图像文件(使用-h可以生成高质量图像)。

在本教程的剩余部分,代码片段需要复制到construct函数的主体中。

简单前馈网络

使用ManimML,我们可以轻松可视化一个简单的前馈神经网络。

from manim_ml.neural_network import NeuralNetwork, FeedForwardLayer

nn = NeuralNetwork([
    FeedForwardLayer(num_nodes=3),
    FeedForwardLayer(num_nodes=5),
    FeedForwardLayer(num_nodes=3)
])
self.add(nn)

在上面的代码中,我们创建了一个NeuralNetwork对象,并向其传递了一个层列表。对于每个前馈层,我们指定节点数量。ManimML会自动将单个层组合成一个完整的神经网络。我们在场景的construct方法主体中调用self.add(nn),以将神经网络添加到场景中。

大多数ManimML神经网络对象和函数可以直接从manim_ml.neural_network导入。

现在我们可以通过运行以下命令来渲染场景的静态图像:

$ manim -pql example.py

前向传播动画

我们可以通过使用neural_network.make_forward_pass_animation方法创建动画,并在场景中使用self.play(animation)播放动画,来自动渲染神经网络的前向传播。

from manim_ml.neural_network import NeuralNetwork, FeedForwardLayer
# 创建神经网络
nn = NeuralNetwork([
    FeedForwardLayer(num_nodes=3),
    FeedForwardLayer(num_nodes=5),
    FeedForwardLayer(num_nodes=3)
])
self.add(nn)
# 创建动画
forward_pass_animation = nn.make_forward_pass_animation()
# 播放动画
self.play(forward_pass_animation)

现在我们可以通过以下命令进行渲染:

$ manim -pql example.py

卷积神经网络

ManimML支持卷积神经网络的可视化。你可以按照以下方式指定特征图数量、特征图大小和滤波器大小:Convolutional2DLayer(num_feature_maps, feature_map_size, filter_size)。我们还可以更改许多其他样式参数(文档即将推出)。

这里是一个多层卷积神经网络。如果你不熟悉卷积网络,这个概述是一个很好的资源。此外,CNN Explainer是一个很棒的交互式工具,可以帮助你理解CNN,全部在浏览器中进行。

在指定CNN时,相邻层的特征图大小和滤波器尺寸必须匹配。

from manim_ml.neural_network import NeuralNetwork, FeedForwardLayer, Convolutional2DLayer

nn = NeuralNetwork([
        Convolutional2DLayer(1, 7, 3, filter_spacing=0.32), # 注意默认步长为1。
        Convolutional2DLayer(3, 5, 3, filter_spacing=0.32),
        Convolutional2DLayer(5, 3, 3, filter_spacing=0.18),
        FeedForwardLayer(3),
        FeedForwardLayer(3),
    ],
    layer_spacing=0.25,
)
# 将神经网络居中
nn.move_to(ORIGIN)
self.add(nn)
# 创建前向传播动画
forward_pass = nn.make_forward_pass_animation()

现在我们可以通过以下命令进行渲染:

$ manim -pql example.py

这就是一个卷积神经网络。

带图像的卷积神经网络

我们还可以通过在第一个卷积层之前指定一个ImageLayer来制作图像输入卷积神经网络的动画。

import numpy as np
from PIL import Image
from manim_ml.neural_network import NeuralNetwork, FeedForwardLayer, Convolutional2DLayer, ImageLayer

image = Image.open("digit.jpeg") # 你需要下载一个数字图像
numpy_image = np.asarray(image)

nn = NeuralNetwork([
        ImageLayer(numpy_image, height=1.5),
        Convolutional2DLayer(1, 7, 3, filter_spacing=0.32), # 注意默认步长为1
        Convolutional2DLayer(3, 5, 3, filter_spacing=0.32),
        Convolutional2DLayer(5, 3, 3, filter_spacing=0.18),
        FeedForwardLayer(3),
        FeedForwardLayer(3),
    ],
    layer_spacing=0.25,
)
# 将神经网络居中
nn.move_to(ORIGIN)
self.add(nn)
# 创建前向传播动画
forward_pass = nn.make_forward_pass_animation()

现在我们可以用以下命令渲染:

$ manim -pql example.py

最大池化

深度学习中常见的操作是2D最大池化,它可以减小卷积特征图的大小。我们可以使用MaxPooling2DLayer来可视化最大池化。

from manim_ml.neural_network import NeuralNetwork, Convolutional2DLayer, MaxPooling2DLayer
# 创建神经网络
nn = NeuralNetwork([
        Convolutional2DLayer(1, 8),
        Convolutional2DLayer(3, 6, 3),
        MaxPooling2DLayer(kernel_size=2),
        Convolutional2DLayer(5, 2, 2),
    ],
    layer_spacing=0.25,
)
# 将神经网络居中
nn.move_to(ORIGIN)
self.add(nn)
# 播放动画
forward_pass = nn.make_forward_pass_animation()
self.wait(1)
self.play(forward_pass)

现在我们可以用以下命令渲染:

$ manim -pql example.py

激活函数

激活函数为神经网络的输出添加非线性。它们有不同的形状,能够可视化这些函数很有用。我通过传递参数,为FeedForwardLayerConvolutional2DLayer添加了可视化激活函数的功能,如下所示:

layer = FeedForwardLayer(num_nodes=3, activation_function="ReLU")

我们可以将这些添加到更大的神经网络中,如下所示:

from manim_ml.neural_network import NeuralNetwork, Convolutional2DLayer, FeedForwardLayer
# 创建神经网络
nn = NeuralNetwork([
        Convolutional2DLayer(1, 7, filter_spacing=0.32),
        Convolutional2DLayer(3, 5, 3, filter_spacing=0.32, activation_function="ReLU"),
        FeedForwardLayer(3, activation_function="Sigmoid"),
    ],
    layer_spacing=0.25,
)
self.add(nn)
# 播放动画
forward_pass = nn.make_forward_pass_animation()
self.play(forward_pass)

现在我们可以用以下命令渲染:

$ manim -pql example.py

更复杂的动画:神经网络 Dropout

from manim_ml.neural_network import NeuralNetwork, FeedForwardLayer
from manim_ml.neural_network.animations.dropout import make_neural_network_dropout_animation
# 创建神经网络
nn = NeuralNetwork([
        FeedForwardLayer(3),
        FeedForwardLayer(5),
        FeedForwardLayer(3),
        FeedForwardLayer(5),
        FeedForwardLayer(4),
    ],
    layer_spacing=0.4,
)
# 将神经网络居中
nn.move_to(ORIGIN)
self.add(nn)
# 播放动画
self.play(
    make_neural_network_dropout_animation(
        nn, dropout_rate=0.25, do_forward_pass=True
    )
)
self.wait(1)

现在我们可以用以下命令渲染:

$ manim -pql example.py

引用

如果你觉得 ManimML 有用,请引用以下内容!

@misc{helbling2023manimml,
      title={ManimML: Communicating Machine Learning Architectures with Animation}, 
      author={Alec Helbling and Duen Horng and Chau},
      year={2023},
      eprint={2306.17108},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号