news 2026/6/10 16:52:29

这个手写数字识别项目咱们直接从代码开撸!用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/6/10 11:02:54

35、Unix与Perl编程:数据检查、求助途径与问题解决

Unix与Perl编程:数据检查、求助途径与问题解决 1. 数据检查的重要性 在处理数据序列时,有些字符绝不能出现在序列中。例如,字符 “X” 不能用来表示核苷酸,“J” 也不对应任何氨基酸。同样,如果下载了对应基因的 DNA 序列,这些序列的编码部分长度应该是三个核苷酸的倍数…

作者头像 李华
网站建设 2026/6/9 23:32:40

Kotaemon缓存机制优化揭秘:降低重复查询成本50%

Kotaemon缓存机制优化揭秘:降低重复查询成本50% 在当前大模型应用快速落地的浪潮中,企业对智能问答系统的期待早已超越“能答出来”的基础要求,转而追求高响应速度、低运营成本与强一致性的综合体验。然而,在典型的检索增强生成&a…

作者头像 李华
网站建设 2026/6/10 7:46:43

EmotiVoice语音合成中的停顿与重音控制技巧

EmotiVoice语音合成中的停顿与重音控制技巧 在智能语音助手、有声读物平台和虚拟偶像直播日益普及的今天,用户早已不再满足于“能说话”的机器语音。他们期待的是富有节奏感、带有情绪起伏、听起来像真人般自然的表达。然而,许多TTS系统仍停留在“逐字朗…

作者头像 李华
网站建设 2026/6/10 12:57:08

构建高精度问答系统,Kotaemon是怎么做到的?

构建高精度问答系统,Kotaemon是怎么做到的? 在企业级AI应用日益普及的今天,一个常见的痛点浮现出来:为什么我们的智能客服总是“答非所问”?明明接入了GPT-4这样的强大语言模型,却依然频繁出现编造答案、无…

作者头像 李华
网站建设 2026/6/10 12:58:57

Kotaemon自动化测试框架搭建经验谈

Kotaemon自动化测试框架搭建经验谈 在企业级智能对话系统日益复杂的今天,一个看似简单的用户提问——“我的年假还有几天?”——背后可能牵涉到自然语言理解、知识检索、权限校验、多轮交互管理甚至跨系统调用等多个环节。一旦其中某个模块出现偏差&…

作者头像 李华
网站建设 2026/6/10 12:58:59

Kotaemon在法律咨询机器人中的实际应用效果

Kotaemon在法律咨询机器人中的实际应用效果 在律师事务所的日常工作中,一个常见的场景是:客户反复咨询“租房违约怎么赔”“劳动仲裁时效多久”这类基础问题,耗费了大量初级律师的时间。而与此同时,AI聊天机器人又常常给出模棱两可…

作者头像 李华