从一个“看不懂”的问题说起

学深度学习的时候,我经常卡在一种状态里:网络结构图和公式看了不少,但一动手,连“32×32 的灰度图经过 3×3 卷积、再经过 2×2 池化后,尺寸到底变成多少”都要停下来想半天。卷积核在数值上做了什么、ReLU 和池化改变了什么、Softmax 输出的概率是怎么一步步算出来的,光靠教材很难形成直观印象。

所以我一直在找能直接跑起来的例子,最好是“一套代码 + 几张能看懂的结果图”,让我能对着输出逐步验证每一层的变化。用“深度学习 卷积 可视化 时间序列预测”这类关键词搜索时,我在 MoHub 上看到了「深度学习综合教学案例库」。

它把 CNN、序列模型、生成式模型、图神经网络这些主题拆成一个一个独立的小脚本,每个脚本都自带数据、参数区和中文注释。我把它取到本地,用 Syslab 的 Julia 环境逐个跑了一遍,下面记录复现过程和几个关键结果。

它到底解决了什么问题

这套案例库的价值在于:用“能跑通的最小脚本”把几个抽象概念落到具体数值上。按目录看,它分成 6 个大类、共 18 个可独立运行的 .jl 脚本:

  • 深度学习基础:深度学习算子可视化、Softmax 与交叉熵分类演示、神经网络函数拟合、鸢尾花模式识别分类、SOM 无监督聚类;
  • CNN 图像分类:简单 CNN 几何图形分类、图像数据增强对比、预训练网络图像分类、CNN 与浅层网络对比、CNN 特征图可视化;
  • 序列与时间序列:LSTM 时间序列分类、LSTM 时间序列预测、BiLSTM 与 GRU 预测对比、Transformer 时间序列预测;
  • 生成式模型:VAE 图像重构、自编码器图像去噪;
  • 图神经网络:GCN 节点分类;
  • 模型部署与迁移:ONNX 模型导入预测。

每个脚本都是独立入口,输入是内置的合成数据或本地图像/CSV,输出是准确率、损失、误差这类指标加对应的结果图。它不追求大模型和复杂架构,而是先把“数据 → 前向传播 → 损失 → 优化 → 评价”这条主线讲清楚。

从适用场景看,它更适合:想跟着代码理解网络结构的自学者;需要快速验证某个算子行为的开发者;以及需要一套可复现基线来对照自己实现的人。需要注意的是,案例里不少“CNN”“LSTM”“VAE”用的是可解释的轻量实现或等效基线(比如用形状特征模拟 CNN 的层级判别、用 PCA 演示 VAE 编码),并非工业级模型,重点是流程和概念。

怎么运行

运行环境是 Syslab,我用的是 Syslab 2026b(Julia 1.10.10),需要 TyDeepLearning、TyImageProcessing、TyPlot 三个库,当前版本分别是 1.0.7、1.0.15、1.0.65。脚本开头设置深度学习后端,默认 MindSpore:

using TyDeepLearning
set_backend(:mindspore)

每个案例的关键参数都集中在“关键参数设置区域”,比如学习率、训练轮数、滑动窗口长度、随机种子等,改起来很方便;随机种子默认固定(脚本里 randomSeed=2026),结果可以复现。

运行方式很简单:进入某个案例文件夹,直接 include 对应的 .jl 文件即可,比如:

include("LSTM时间序列预测.jl")

运行后控制台打印指标,同时 TyPlot 弹出结果图。我这次重点跑了四个案例——深度学习算子可视化、简单 CNN 几何图形分类、LSTM 时间序列预测、VAE 图像重构,都能正常复现。

原理:从算子到一条完整链路

图像类案例共用一套本地几何图形样本(圆形、方形、三角形拼图),这是我跑的这几个案例的数据基础。

在这里插入图片描述

图1:几何图形样本数据集

先看最基础的「深度学习算子可视化」。它把一张 32×32 灰度图整理成 NCHW 四维张量,用一个 3×3 边缘检测卷积核做卷积,再依次过 ReLU、2×2 最大池化、全连接和 Softmax。这条链路就是图像分类网络前向传播的骨架。

数据流是:输入 32×32 → 卷积后 30×30(3×3 核不加填充,尺寸减 2)→ ReLU 只把负值置 0、尺寸不变 → 2×2 池化后 15×15(长宽各减半)→ 展平成 225 维向量 → 全连接输出 3 个 logits → Softmax 转成概率。

在这里插入图片描述

图2:深度学习算子前向传播结果

「简单 CNN 几何图形分类」则更进一步:每张拼图切成 4×4=16 个小样本,从小样本里提取 15 个形状特征(面积占比、边缘密度、质心位置、对称性等),用 Softmax 分类器和最近邻质心分类器训练并预测,最后画混淆矩阵。这里的“特征提取 + 分类”实际上在模拟 CNN 从低级边缘到高级形状判别的过程。

「LSTM 时间序列预测」换了一种思路:把连续序列按滑动窗口切成监督样本——用前 24 个点预测第 25 个点,再用岭回归基线训练。它保留了 LSTM 的语境(窗口、历史信息),但先用稳定基线把“序列 → 样本 → 预测 → 误差”的流程打通。「VAE 图像重构」把几何图形缩到 28×28,用 PCA 取前 2 个主成分作为潜变量,再做低维重构,用 MSE 衡量信息损失。

几个关键结果

CNN 几何分类:训练准确率 91.67%,测试准确率 75.0%。

这个案例每类 16 个样本,分层划分后 36 个训练样本、12 个测试样本。训练准确率 91.67%,测试只有 75.0%,中间 16 个百分点的差距是典型的小样本过拟合信号。看混淆矩阵 [4 0 0; 3 1 0; 0 0 4],12 个测试样本错 3 个,而且全部是方形被误判成圆形。原因不难理解:方和圆都是居中、对称的紧致图形,缩到 32×32 后,靠边缘密度和对称性这类统计特征很难区分。这说明案例的难点不在网络,而在小样本下形状本身的可分性。
在这里插入图片描述

图3:CNN几何分类损失与混淆矩阵

LSTM 时间序列预测:MSE 0.001447,MAE 0.030098。

序列长度 360、窗口 24,前 75%(252 个窗口)训练、后 25%(84 个窗口)测试。岭回归基线在测试集上的 MSE 只有 0.001447,预测曲线基本贴合真实序列,误差曲线在 0 附近小幅波动。这说明对带噪正弦这类有明显周期的序列,滑动窗口加线性基线已经能抓住主要趋势;LSTM 的价值在于更长依赖、更强非线性的场景,这也正是案例留出的扩展方向。
在这里插入图片描述

图4:LSTM时间序列预测对比

VAE 图像重构:平均重构误差 0.040147。

48 个几何图形样本,只用 2 维潜变量(PCA 前两个主成分)重构,平均 MSE 是 0.040147。误差不为零,说明 2 维编码丢掉了一部分高频细节,但重构图像仍能看清形状轮廓——直观体现了“低维编码保留主体结构、丢弃细节”的压缩思想。局限也明显:这是 PCA 线性编码,真正的 VAE 还有 KL 散度正则和随机采样,两者在潜空间结构上并不等价。
在这里插入图片描述

图5:VAE图像重构对比

小结

这套案例库没有炫技的大模型,但把深度学习里最容易卡住的几个环节——算子尺寸变化、分类流程、序列预测、编码重构——都做成了能跑、能看、能改的小例子。对想通过运行代码来理解原理的自学者来说,这比单纯看公式有效得多。

完整的案例和源码在 MoHub 上可以找到:https://mohub.net/model/26291/summary

更多推荐