convnetjs
让深度学习跑在浏览器里,零配置、零安装,打开HTML即可训练CNN/RNN/DQN
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让深度学习跑在浏览器里,零配置、零安装,打开HTML即可训练CNN/RNN/DQN
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2014年前后,深度学习还是少数人的游戏——需要配置 CUDA 环境、编译 Caffe/Torch、写大量底层代码。斯坦福大学博士生 Andrej Karpathy(后成为特斯拉 Autopilot 负责人、OpenAI 创始成员之一)在读博期间做了一个大胆实验:把卷积神经网络完全用 JavaScript 重写,让它跑在浏览器里。不需要安装任何依赖,打开一个 HTML 文件就能训练神经网络。
这个项目叫 ConvNetJS,GitHub 星标超过 11000,至今仍是最知名的纯浏览器端深度学习框架之一。
ConvNetJS 的设计思路非常清晰:像搭积木一样构建神经网络。每个神经网络层(如全连接层、卷积层、池化层)都是独立的 JavaScript 类,开发者通过一个配置数组声明网络结构,然后调用训练器开始训练。
核心模块划分(src/ 目录):
| 模块文件 | 职责 |
|---|---|
convnet_net.js | 网络容器,管理层的连接与前向/反向传播 |
convnet_layers_dotproducts.js | 全连接层、卷积层、局部归一化层 |
convnet_layers_nonlinearities.js | 激活函数(ReLU、Sigmoid、Tanh) |
convnet_layers_pool.js | 池化层(Max Pooling) |
convnet_layers_loss.js | 损失函数(Softmax/SVM 分类、L2 回归) |
convnet_layers_dropout.js | Dropout 正则化 |
convnet_trainers.js | 训练器(SGDTrainer、AdagradTrainer、AdamTrainer 等) |
convnet_magicnet.js | 自动化超参搜索 |
convnet_vol.js | 数据张量(Volume)封装,存储权重与梯度 |
convnet_vol_util.js | 数据预处理工具(图片→Vol 转换) |
整个网络的数据流动如下:输入 Vol → 逐层前向传播 → Softmax/SVM 损失层 → 计算梯度 → 逐层反向传播 → 训练器更新权重。每个层类都实现了 forward() 和 backward() 方法,形成链式调用链。
ConvNetJS 并非玩具项目,它支持完整的深度学习三大场景:
1. 图像分类(CNN)
在 MNIST 手写数字数据集上,ConvNetJS 可达到约 99% 的准确率。用户只需声明网络结构,加载 MNIST 数据集文件,即可亲眼看到训练过程中的损失曲线和准确率变化。
layer_defs.push({type:'input', out_sx:28, out_sy:28, out_depth:1});
layer_defs.push({type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'});
layer_defs.push({type:'pool', sx:2, stride:2});
layer_defs.push({type:'softmax', num_classes:10});
2. 回归分析
支持 L2 损失函数的回归任务,可用于预测连续值(如房价、评分)。
3. 深度强化学习(Deep Q Learning)
ConvNetJS 包含实验性的强化学习模块,通过 MagicNet 类实现自动化超参数搜索,Karpathy 亲自写了一个演示页面,展示用强化学习控制小车穿过随机生成的地形。
ConvNetJS 最大的魅力在于零配置。用户有三种使用方式:
convnet.js,在 HTML 中通过 <script src="convnet.js"> 引入,然后在 JavaScript 中定义网络。bower install convnetjs(作者推荐的包管理器方式)Demo 页面提供了丰富的可视化:实时显示训练集/测试集准确率曲线、每批次样本的预测结果、甚至可以手动输入数据点观察网络行为。这种即时反馈对理解神经网络的工作原理有极大帮助——你不仅在"编程",还在"观察"神经网络的学习过程。
1. 已停止维护
Karpathy 在 README 中明确写道:"I am not actively maintaining ConvNetJS anymore because I simply don't have time." 最后一次 commit 是 10 年前。虽然项目仍可运行,但依赖的外部资源(如 MNIST 数据集文件)可能已不可用,npm 包也无法正常工作。
2. 性能瓶颈
JavaScript 的计算性能远不如 CUDA 加速的 C++/Python 实现。用 ConvNetJS 训练一个中等规模的网络可能需要数小时,而同等规模的 PyTorch 模型只需几分钟。在 2024 年的视角下,它更多是教育工具而非生产级框架。
3. 不支持现代深度学习特性
缺乏对 Transformer、注意力机制、BatchNorm、ResNet 等现代架构的直接支持。如果要构建复杂模型,需要从底层手写。
尽管已停止维护,ConvNetJS 的历史地位不容忽视:
Karpathy 后来转向 PyTorch/TensorFlow,但 ConvNetJS 始终是他最早"让 AI 走出实验室"的重要实验。
ConvNetJS 无需服务器,纯前端运行:
convnet.js(约 500KB)<script src="convnet.js"></script>硬件需求极低——任何能运行现代浏览器的设备(笔记本、平板、手机)都可以,不需要 GPU。