在浏览器中训练 MNIST:用 jax-js 搭建完整神经网络训练循环实战
在浏览器中训练 MNIST用 jax-js 搭建完整神经网络训练循环实战【免费下载链接】jax-jsJAX in JavaScript – ML library for the web, running on WebGPU Wasm项目地址: https://gitcode.com/gh_mirrors/ja/jax-jsjax-js是一个纯 JavaScript 编写的机器学习库把 JAX 风格的高性能计算内核带到网页端——它能把数组运算自动翻译成WebGPU与WebAssembly (Wasm)内核让你不需要服务器、不安装任何重型依赖就能在自己的浏览器里完成一次完整的MNIST 手写数字识别神经网络训练加载数据、前向传播、反向传播、Adam 优化、测试集评估一条龙跑通。1️⃣ 为什么能在浏览器里跑深度学习传统训练需要 Python CUDA GPU而 jax-js 的巧妙之处在于零外部依赖库从零手写gzip 后仅约 80 KB多后端切换webgpuGPU 加速性能最佳、wasm多线程 CPU兼容性最好、webgl旧设备兜底JAX 式 APInumpy数组、grad自动微分、jit算子融合、vmap向量化与 Python 的 JAX 高度同构optax 优化器配套的jax-js/optax提供 Adam、SGD 等主流优化算法。完整可运行的 MNIST 训练 Demo 源码位于 website/src/routes/mnist/page.svelte官方站点上可直接点 Run 观看实时训练曲线。2️⃣ 一键准备环境初始化 WebGPU 后端浏览器端训练的第一步是探测并启动可用的计算后端。推荐优先使用webgpuimport { init, defaultDevice } from jax-js/jax; const devices await init(); // 启动所有可用后端 if (devices.includes(webgpu)) { defaultDevice(webgpu); // 优先 GPU } Chrome / Edge 上 WebGPU 支持最完整训练速度比 Wasm 后端快一个数量级。后端能力对照表见 FEATURES.md。3️⃣ 在浏览器加载 MNIST 数据集MNIST 有 6 万张训练图 1 万张测试图每张是 28×28 灰度图。jax-js 的 Demo 直接用浏览器原生的DecompressionStream解压 gzip 文件并解析 IDX 二进制格式无需服务端支持数据加载还带缓存数据抓取与解析website/src/lib/dataset/mnist.ts像素值归一化到[0, 1]后 reshape 成[batch, 28, 28]的float32数组即可送入网络。const X np.array(buf).mul(1 / 255).reshape([-1, 28, 28]);4️⃣ 搭建模型三层 MLP 的前向传播官方 Demo 提供两个可选模型这里以最经典的784 → 256 → 128 → 10三层 MLP 为例。权重用random.uniform按 Xavier 风格初始化前向传播就三组矩阵乘 ReLU最后用logSoftmax输出对数概率const z1 np.dot(x, w1).add(b1); const a1 nn.relu(z1); // ……同理 z2/a2 → z3 return nn.logSoftmax(z3);激活函数库src/library/nn.ts卷积模型ConvNet两层卷积 池化 全连接也写在同一文件里准确率更高。5️⃣ 损失函数负对数似然分类任务用交叉熵损失。技巧是logSoftmax输出直接乘以oneHot标签再取负均值比先 exp 再 log数值更稳定const loss (params, x, y) predict(params, x).mul(nn.oneHot(y, 10)).sum().mul(-1 / batchSize);6️⃣ 训练循环核心valueAndGrad Adam这是整篇文章最精华的一步。JAX 风格的valueAndGrad一次调用同时返回损失值和梯度再配合jax-js/optax的 Adam 更新参数就构成了完整的训练循环const solver adam(learningRate); let optState solver.init(tree.ref(params)); for (const [X, y] of batches) { const [lossVal, lossGrad] valueAndGrad(loss)(tree.ref(params), X, y); [updates, optState] solver.update(lossGrad, optState); params applyUpdates(params, updates); await blockUntilReady(params); // 等待 GPU 完成 }Adam 实现packages/optax/src/alias.tsvalueAndGrad等核心变换从主包导出src/index.tsDemo 默认配置10 个 epoch、batchSize 1000MLP/ 250ConvNet、学习率 0.005每轮结束在测试集上评估准确率并绘制 Train Loss / Test Accuracy 实时曲线。7️⃣ 性能关键jit 算子融合在 GPU 上瓶颈常常是内存带宽而非算力。用jit包裹前向函数可把矩阵乘 → 加法 → ReLU等多个算子融合成单个内核减少内核调度与显存往返开销const predict jit((params, x) { /* 前向传播 */ });这就是 jax-js 相比手写内核库在神经网络场景下的独特优势。8️⃣ 训练完成后手绘数字实时推理Demo 还内置了一个彩蛋画布——训练结束后你可以直接在鼠标/触屏上画一个数字图像经过居中归一化后送入模型实时显示 0~9 十个类别的概率条。从训练到交互推理完全发生在同一页面这正是浏览器端 ML 最迷人的地方。 小结环节jax-js 对应能力数据加载原生 fetch gzip 解压 缓存张量运算numpy模块兼容 NumPy API自动微分valueAndGrad/grad优化器jax-js/optax的adamGPU 加速webgpu后端 jit融合无需服务器、无需 Python 环境一份 TypeScript 代码就能在浏览器里完成MNIST 完整训练循环——这就是 jax-js 给 Web 端深度学习带来的改变。动手的下一步把 Demo 里的 MLP 换成 ConvNet或把学习率滑到 0.01 看看收敛速度的变化。【免费下载链接】jax-jsJAX in JavaScript – ML library for the web, running on WebGPU Wasm项目地址: https://gitcode.com/gh_mirrors/ja/jax-js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Sonata预训练复现路线图:如何用Pointcept从零训练自己的3D点云自监督模型

Sonata预训练复现路线图:如何用Pointcept从零训练自己的3D点云自监督模型

Sonata预训练复现路线图:如何用Pointcept从零训练自己的3D点云自监督模型 【免费下载链接】sonata [CVPR25 Highlight] Official repository of Sonata: Self-Supervised Learning of Reliable Point Representations 项目地址: https://gitcode.com/gh_mirrors/s…

2026/8/24 9:37:01 阅读更多 →
Agentic AI故障诊断:构建分类法与系统性解决方案

Agentic AI故障诊断:构建分类法与系统性解决方案

1. 项目概述:为什么我们需要一张Agentic AI的“故障地图”?最近和几个做AI应用落地的朋友聊天,大家不约而同地提到了同一个痛点:Agent(智能体)系统上线后,时不时会“抽风”。这种“抽风”不是简…

2026/8/24 9:37:01 阅读更多 →
随机信号参数建模:从ARMA模型到工程实践全解析

随机信号参数建模:从ARMA模型到工程实践全解析

1. 项目概述:从“黑箱”到“白箱”的信号理解之路在信号处理、金融分析、语音识别乃至气象预测的日常工作中,我们常常面对一个核心挑战:拿到一段看似杂乱无章、充满不确定性的数据序列——也就是随机信号——我们该如何理解它、预测它&#x…

2026/8/24 9:37:01 阅读更多 →

最新新闻

C++模板函数:从泛型编程到编译期计算的完整指南

C++模板函数:从泛型编程到编译期计算的完整指南

1. 从“重复造轮子”到“一劳永逸”:为什么我们需要模板函数?如果你写过一段时间的C,尤其是写过一些需要处理不同类型数据的通用算法,比如交换两个变量的值、找一个数组里的最大值、或者实现一个简单的排序,你大概率会…

2026/8/24 10:21:34 阅读更多 →
动态规划入门:0/1背包问题原理与工程实践

动态规划入门:0/1背包问题原理与工程实践

1. 为什么背包问题成了动态规划的“试金石”——从超市购物小票说起你有没有过这种经历:周末去超市,推着购物车在货架间穿行,心里默念着“今天预算300块,要买够一周的米面油、水果蔬菜、还有孩子爱吃的零食”。走到零食区&#xf…

2026/8/24 10:21:34 阅读更多 →
C++模板特例化:全特化与偏特化实战解析

C++模板特例化:全特化与偏特化实战解析

1. 项目概述&#xff1a;为什么我们需要模板特例化&#xff1f;在C的世界里&#xff0c;泛型编程是提升代码复用性和灵活性的利器&#xff0c;而模板&#xff08;Template&#xff09;正是其核心。我们写一个std::vector<T>&#xff0c;就能装下任何类型的元素&#xff1…

2026/8/24 10:21:34 阅读更多 →
Qt实现Modbus RTU串口读取:从QSerialPort到协议解析实战

Qt实现Modbus RTU串口读取:从QSerialPort到协议解析实战

1. 项目概述&#xff1a;为什么要在Qt里折腾Modbus串口读操作&#xff1f; 如果你正在工业自动化、嵌入式上位机或者物联网数据采集的圈子里混&#xff0c;那你对Modbus协议和串口通信这两个词肯定不会陌生。它们就像是这个领域里的“普通话”和“电话线”&#xff0c;一个定义…

2026/8/24 10:21:34 阅读更多 →
深度剖析 better-npm-run 的跨平台实现:同一脚本在 Windows 与 Linux 上无缝运行的秘密

深度剖析 better-npm-run 的跨平台实现:同一脚本在 Windows 与 Linux 上无缝运行的秘密

深度剖析 better-npm-run 的跨平台实现&#xff1a;同一脚本在 Windows 与 Linux 上无缝运行的秘密 【免费下载链接】better-npm-run &#x1f3c3;‍♂️ Better NPM scripts runner 项目地址: https://gitcode.com/gh_mirrors/be/better-npm-run better-npm-run 是一款…

2026/8/24 10:21:34 阅读更多 →
jwst代码实现原理:stpipe框架如何优雅管理Step参数继承、CRDS参考文件与日志

jwst代码实现原理:stpipe框架如何优雅管理Step参数继承、CRDS参考文件与日志

jwst代码实现原理&#xff1a;stpipe框架如何优雅管理Step参数继承、CRDS参考文件与日志 【免费下载链接】jwst processing pipeline for James Webb Space Telescope imagery and spectroscopy 项目地址: https://gitcode.com/gh_mirrors/jw/jwst jwst 是詹姆斯韦伯空间…

2026/8/24 10:20:34 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力&#xff1b;确需渲染 HTML 时&#xff0c;先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述&#xff1a;Windows登录密码的“黑匣子”每次你按下CtrlAltDel&#xff0c;输入密码&#xff0c;然后看到那个熟悉的桌面&#xff0c;这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者&#xff0c;我经常被问到&#xff1a;“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述&#xff1a;AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时&#xff0c;遇到一个典型案例&#xff1a;候选人在视频面试中无意提到竞争对手产品名称&#xff0c;系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →