基于社区版Manim修复深度神经网络动画及代码展示异常问题
问题解决:Manim实现DNN动画+语法高亮代码展示
问题背景
使用社区版Manim制作深度神经网络(DNN)动画,同时在旁侧展示对应Python代码,但当前实现存在画面变形、文本超出屏幕、无语法高亮等问题,需修改代码还原参考图的展示效果。
初始问题代码
from manim import * from manim_ml.neural_network.layers import FeedForwardLayer from manim_ml.neural_network.neural_network import NeuralNetwork config.pixel_height = 900 config.pixel_width = 1400 config.frame_height = 7.0 config.frame_width = 7.0 NN_text =""" import keras from keras.models import Sequential from keras. layers import Dense model = Sequential () n_cols = concrete_data. shape [1] model. add (Dense (5, activation='relu', model. add (Dense(5, activations' reluj, input_shape=(n_ (cols, ))) model.add(Dense (1)) model. compile (optimizer='adam', loss='mean_squared_error') model.fit (predictors, target) predictions = model.predict(test_data) """ class NeuralNetworkScene(Scene): """Test Scene for the Neural Network""" def construct(self): # Make the text desc = Text(NN_text,font_size=7) desc=desc.next_to(ORIGIN) # Make the Layer object layers = [FeedForwardLayer(8), FeedForwardLayer(5), FeedForwardLayer(5),FeedForwardLayer(1)] nn = NeuralNetwork(layers) nn.scale(1) nn.move_to(LEFT) # Make Animation self.add(nn) first_layer = Text("Input Layer", font_size=7) first_layer=first_layer.next_to(layers[0].get_corner(DOWN),DOWN) self.add(first_layer) hidden_layer = Text("Hidden Layer", font_size=7) hidden_layer=hidden_layer.next_to(nn.get_corner(DOWN),DOWN) self.add(hidden_layer) output_layer = Text("Output Layer", font_size=7) location_output = layers[3].get_corner(DOWN) location_output[1] = layers[0].get_corner(DOWN)[1] output_layer=output_layer.next_to(location_output,DOWN) self.add(output_layer) # self.play(Create(nn)) forward_propagation_animation = nn.make_forward_pass_animation( run_time=5, passing_flash=True ) self.play(FadeIn(desc),forward_propagation_animation)
修改后的代码
from manim import * from manim_ml.neural_network.layers import FeedForwardLayer from manim_ml.neural_network.neural_network import NeuralNetwork # 修正画布配置,保持宽高比匹配像素尺寸,避免画面变形 config.pixel_height = 900 config.pixel_width = 1400 config.frame_height = 9.0 config.frame_width = 14.0 # 9/14 ≈ 900/1400,比例一致 # 修正示例代码中的语法错误,保证代码合法性 NN_code = """ import keras from keras.models import Sequential from keras.layers import Dense model = Sequential() n_cols = concrete_data.shape[1] model.add(Dense(5, activation='relu', input_shape=(n_cols,))) model.add(Dense(5, activation='relu')) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(predictors, target) predictions = model.predict(test_data) """ class NeuralNetworkScene(Scene): """DNN动画与代码展示场景""" def construct(self): # 创建神经网络并布局到左侧区域 layers = [FeedForwardLayer(8), FeedForwardLayer(5), FeedForwardLayer(5), FeedForwardLayer(1)] nn = NeuralNetwork(layers) nn.scale(0.8) nn.move_to(LEFT * 4) self.add(nn) # 添加层标注文本,调整大小与位置避免重叠 label_font_size = 20 input_label = Text("Input Layer", font_size=label_font_size) input_label.next_to(layers[0], DOWN, buff=0.3) self.add(input_label) hidden_label = Text("Hidden Layers", font_size=label_font_size) hidden_label.next_to(nn.get_center(), DOWN, buff=0.5) self.add(hidden_label) output_label = Text("Output Layer", font_size=label_font_size) output_label.next_to(layers[-1], DOWN, buff=0.3) self.add(output_label) # 创建带语法高亮的代码块,布局到右侧区域 code_block = Code( code=NN_code, tab_width=4, background="window", language="Python", font_size=18, line_spacing=1.2 ) code_block.move_to(RIGHT * 3) self.add(code_block) # 优化动画流程:先显示静态元素,再执行前向传播动画 self.play( FadeIn(nn), FadeIn(input_label, hidden_label, output_label), FadeIn(code_block), run_time=1.5 ) forward_anim = nn.make_forward_pass_animation(run_time=5, passing_flash=True) self.play(forward_anim)
关键修改说明
- 画布比例修正:调整
frame_height和frame_width与像素尺寸比例一致,彻底解决画面变形问题。 - 语法高亮实现:用Manim内置
Code组件替代Text,自动实现Python语法高亮,同时支持代码格式化。 - 示例代码修复:修正原代码中的括号不匹配、拼写错误、缩进问题,保证代码的合法性与可读性。
- 布局优化:将神经网络固定在左侧,代码块放在右侧,通过缩放和位置调整避免元素超出屏幕;层标注文本调整字体大小和位置,避免重叠。
- 动画逻辑优化:先统一显示所有静态元素,再执行前向传播动画,视觉流程更清晰自然。
内容的提问来源于stack exchange,提问作者CSe
相关产品推荐
相关产品推荐

