news 2026/5/1 9:44:44

这个手写数字识别项目咱们直接从代码开撸!用Keras搭建个全连接神经网络,30行代码搞定核心功能,顺便聊聊代码里那些有意思的小细节

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
这个手写数字识别项目咱们直接从代码开撸!用Keras搭建个全连接神经网络,30行代码搞定核心功能,顺便聊聊代码里那些有意思的小细节

基于神经网络的数字识别完整代码+报告1

先整点硬菜——上核心代码:

from tensorflow import keras import matplotlib.pyplot as plt # 加载经典MNIST数据集 (train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data() # 数据预处理(关键步骤!) train_images = train_images.reshape((60000, 28*28)).astype('float32') / 255 test_images = test_images.reshape((10000, 28*28)).astype('float32') / 255 # 构建神经网络(三层结构) model = keras.Sequential([ keras.layers.Dense(512, activation='relu', input_shape=(28*28,)), keras.layers.Dropout(0.2), keras.layers.Dense(10, activation='softmax') ]) # 配置训练参数 model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 开始炼丹! history = model.fit(train_images, train_labels, epochs=10, batch_size=128, validation_split=0.2) # 测试集验证 test_loss, test_acc = model.evaluate(test_images, test_labels) print(f'\n测试准确率: {test_acc:.4f}')

数据预处理部分有个骚操作:astype('float32') / 255这行代码把像素值压缩到0-1之间。为什么要多此一举?其实这和神经网络的计算特性有关——归一化后的数据能让梯度下降更稳定,就像给汽车轮胎加了防滑链。

网络结构设计有个小彩蛋:第二层的Dropout层像随机给网络断电。这个正则化手段专门防止模型死记硬背,相当于考试时故意忘掉部分知识点,强迫神经网络真正理解数字特征。

训练过程中的batch_size=128值得说道说道。这个参数相当于把六万张图切成小块训练,既照顾内存限制又保证梯度更新频率。试着改成256会发现训练速度提升但准确率可能抖动,这就是典型的效率与效果的博弈。

来看段可视化代码,感受下神经网络的识别效果:

# 随机抽取测试样本展示 import random index = random.randint(0, 9999) plt.imshow(test_images[index].reshape(28, 28), cmap='gray') pred = model.predict(test_images[index][None,...]) print(f'预测结果: {pred.argmax()} 实际标签: {test_labels[index]}')

跑这段代码可能会看到有趣的现象:偶尔会识别错误的往往是那些人类都容易混淆的数字,比如7和9连笔写的时候。这说明神经网络的学习方式在某些方面确实接近人类视觉认知。

最后看下性能指标,测试集准确率大概能达到98%左右。这时候可以尝试在模型里加个卷积层,准确率还能再提升个0.5%。不过对于大多数实际应用场景,当前模型已经足够实用——毕竟银行ATM上的数字识别也没必要追求极致准确率。

整个项目跑下来不到5分钟(取决于电脑配置),但背后包含了数据预处理、网络架构设计、正则化策略、训练技巧等多个关键知识点。建议动手改改神经元数量、激活函数类型(试试把relu换成elu),观察模型表现的变化,绝对比单纯看理论来得带劲!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 15:58:01

C#:面向对象编程语言四大特征之继承

面向对象编程语言四大特征:封装:把一些属性和方法封装在一个类里面,这个时候对类的封装,方法的封装把一些相关代码写在一个代码块里面,通过方法名进行调用。继承:当我们一些想添加一些属性,但是这些属性已经…

作者头像 李华
网站建设 2026/5/1 6:55:04

Kotaemon非遗文化问答机器人创意提案

Kotaemon非遗文化问答机器人创意提案 在博物馆的互动展区,一个孩子仰头问:“妈妈,皮影戏是怎么变出那么多颜色的?”母亲一时语塞。如果这时旁边的服务终端能立刻回应,并播放一段动态演示,甚至让孩子亲手“操…

作者头像 李华
网站建设 2026/5/1 6:52:12

Kotaemon助力科研人员快速检索学术文献

Kotaemon:科研人员的智能文献助手 在人工智能日新月异的今天,每天都有成千上万篇新的学术论文发布。对于科研人员而言,跟上领域进展早已不是“读几篇顶会文章”那么简单——信息过载已成为常态。更棘手的是,传统搜索引擎只能返回孤…

作者头像 李华
网站建设 2026/5/1 7:57:42

电商客服自动化新范式:基于Kotaemon的对话引擎设计

电商客服自动化新范式:基于Kotaemon的对话引擎设计 在电商平台日均咨询量动辄数万条的今天,用户早已不再满足于“请稍等,正在为您转接人工”的漫长等待。他们希望问题能被秒级响应、精准解答,甚至无需开口就能完成订单修改或售后申…

作者头像 李华
网站建设 2026/5/1 8:11:58

设置 Linux 的时区

查看当前时间timedatectl status列出时区列表timedatectl list-timezones | grep New_York修改时区sudo timedatectl set-timezone America/New_York查看结果>> timedatectl statusLocal time: Wed 2025-12-17 09:51:37 ESTUniversal time: Wed 2025-12-17 14:51:37 UTCR…

作者头像 李华
网站建设 2026/5/1 9:30:19

基于Python的热门游戏推荐系统的设计与实现_0gx5n277--论文

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 基于Python的热门游戏推荐系统的设计与实现_0gx5n277–论文 项目简介 本次…

作者头像 李华