背景
生产实习期间在大唐互联科技有限公司承担的第一个完整交付:一个面向深度学习入门的 MNIST 手写数字识别平台。此前在课程里做过命令行版本的识别实验,公司希望它变成一个“打开浏览器就能用”的产品:用户不用配环境、不用写代码,就能完成从数据准备、训练到识别的全流程。
问题定义
核心挑战不是模型本身(MNIST 是成熟任务),而是把训练过程变成一个可交互的 Web 服务:训练是耗时任务,用户必须能实时看到进度;识别发生在浏览器画布上,图像必须经过严格的预处理才能匹配 MNIST 分布;多种网络架构和超参数组合需要被持久化管理,而不是散落在脚本里。
方案
训练服务。后端用 Django + DRF 提供 REST 接口,训练任务异步执行;通过 Django Channels + Redis 建立 WebSocket 通道,把每个 epoch 的损失与准确率实时推送到前端,Chart.js 绘制训练曲线。提供三种架构(简单 CNN、深度 CNN、全连接网络)与可调超参(学习率、批次大小、优化器),训练好的模型自动落盘并可在界面中切换加载。深度 CNN 在测试集上准确率约 98%。
识别链路。前端提供交互式画布,用户手写后图像经过边界检测、颜色反转、比例缩放、居中对齐等预处理,转成与 MNIST 一致的 28×28 黑底白字再送入模型,返回预测置信度与概率分布。界面同时显示“模型实际看到的图像”,便于排查识别异常——这是从课程实验阶段就保留下来的调试习惯。
工程化。Vue 3 + Element Plus + Tailwind 搭建响应式界面,Docker Compose 编排 Web、Nginx、PostgreSQL、Redis 全套服务,可以一键部署。
我的角色
独立负责后端接口与 WebSocket 通道、PyTorch 训练与预处理管线、前端页面以及部署配置,按周向公司汇报进度并完成验收演示。
结果
平台完整交付并通过实习验收:训练过程全程可视化、中断可恢复,识别链路稳定,演示环境可用 Docker 一键拉起。
复盘
这段经历把“课程里的模型”和“能交付的系统”之间的鸿沟具体化了:日志、异常恢复、状态持久化、部署脚本,这些才是工程交付的主体。后来做 ROS 视觉计算器和 GoTravel 时,这套“先想清楚用户怎么用,再倒推系统结构”的方法成了习惯。