当前位置: 首页 > news >正文

这个手写数字识别项目咱们直接从代码开撸!用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),观察模型表现的变化,绝对比单纯看理论来得带劲!

http://www.cnnetsun.cn/news/120352.html

相关文章:

  • Kotaemon支持的多种部署模式详解(本地/云/混合)
  • Kotaemon矿业安全规程问答机器人部署
  • Python大数据技术的基于Hadoop的健康饮食推荐系统的设计与实现_5578bn9k_yh025
  • 从文本到情感语音:EmotiVoice的技术实现路径
  • Kotaemon多租户支持能力曝光,适用于SaaS场景
  • EmotiVoice语音合成引擎的架构设计与原理剖析
  • 1、Linux API 与 Kylix 开发全解析
  • 3、深入探索Linux API:错误处理与特性对比
  • 17、深入理解Socket服务器的创建与应用
  • 18、Linux网络编程:socket API函数深度解析
  • 聚铭网络蝉联ISC.AI 2025创新百强,持续领跑安全运营、网络与流量安全双赛道
  • 29、Python 中进程与线程管理全解析
  • EmotiVoice开源模型本地部署避坑指南
  • 笔试强训day7
  • EmotiVoice情感编码技术揭秘:如何让AI说出喜怒哀乐?
  • 46、基于 Pthreads 的多线程编程:基础与同步解析
  • 48、基于 Pthreads 的多线程编程:同步机制深入解析
  • 52、基于 Pthreads 的多线程编程(三)
  • Kotaemon文档翻译功能扩展:跨语言问答不再是难题
  • 好无聊,最近没思路
  • Kotaemon水务管理系统智能预警机制
  • Kotaemon视频内容摘要生成实验记录
  • 用Matlab探索齿轮系统的奥秘:刚度计算与动力学响应
  • 【node阅读-0】下载编译node
  • EmotiVoice支持动态情感过渡,实现平滑情绪变化
  • EmotiVoice推理时显存占用优化方案(适用于低配GPU)
  • EmotiVoice支持HTTPS加密传输,保障数据安全
  • 2025年最新AI编程助手深度横评:按功能类型选对你的“副驾”
  • - - - 正则表达式匹配 diff - - -
  • Kotaemon支持PDF/PPT/Word等多种文档解析