TensorFlow学习系列01 | 实现mnist手写数字识别

  • 🍨本文为🔗365天深度学习训练营中的学习记录博客
  • 🍖原作者:K同学啊

一、前置知识

1、知识总结

概念

作用

归一化

统一数据范围,加速训练

卷积层

提取图像局部特征

池化层

压缩数据,增强鲁棒性

全连接层

综合特征,输出分类

激活函数(ReLU)

引入非线性

2、CNN网络

二、代码实现

1、准备工作

1.1.设置GPU

import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用 tf.config.set_visible_devices([gpu0],"GPU") print(gpus)
2026-01-08 18:44:48.698143: I tensorflow/core/util/util.cc:169] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`. [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

1.2.导入数据

import tensorflow as tf from tensorflow.keras import datasets, layers, models import matplotlib.pyplot as plt # 导入mnist数据,依次分别为训练集图片、训练集标签、测试集图片、测试集标签 (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11490434/11490434 [==============================] - 3s 0us/step

1.3.归一化

数据归一化作用:

  • 使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确
  • 加快学习算法的收敛速度
# 将像素的值标准化至0到1的区间内。(对于灰度图片来说,每个像素最大值是255,每个像素最小值是0,也就是直接除以255就可以完成归一化。) train_images, test_images = train_images / 255.0, test_images / 255.0 # 查看数据维数信息 train_images.shape,test_images.shape,train_labels.shape,test_labels.shape
((60000, 28, 28), (10000, 28, 28), (60000,), (10000,))

1.4.可视化图片

# 将数据集前20个图片数据可视化显示 # 进行图像大小为20宽、10长的绘图(单位为英寸inch) plt.figure(figsize=(20,10)) # 遍历MNIST数据集下标数值0~49 for i in range(20): # 将整个figure分成2行10列,绘制第i+1个子图。 plt.subplot(2,10,i+1) # 设置不显示x轴刻度 plt.xticks([]) # 设置不显示y轴刻度 plt.yticks([]) # 设置不显示子图网格线 plt.grid(False) # 图像展示,cmap为颜色图谱,"plt.cm.binary"为matplotlib.cm中的色表 plt.imshow(train_images[i], cmap=plt.cm.binary) # 设置x轴标签显示为图片对应的数字 plt.xlabel(train_labels[i]) # 显示图片 plt.show()

1.5.调整图片格式

#调整数据到我们需要的格式 train_images = train_images.reshape((60000, 28, 28, 1)) test_images = test_images.reshape((10000, 28, 28, 1)) train_images.shape,test_images.shape,train_labels.shape,test_labels.shape
((60000, 28, 28, 1), (10000, 28, 28, 1), (60000,), (10000,))

2、训练模型

2.1.构建CNN网络

# 创建并设置卷积神经网络 # 卷积层:通过卷积操作对输入图像进行降维和特征抽取 # 池化层:是一种非线性形式的下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的鲁棒性。 # 全连接层:在经过几个卷积和池化层之后,神经网络中的高级推理通过全连接层来完成。 model = models.Sequential([ # 设置二维卷积层1,设置32个3*3卷积核,activation参数将激活函数设置为ReLu函数,input_shape参数将图层的输入形状设置为(28, 28, 1) # ReLu函数作为激活励函数可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层 # 相比其它函数来说,ReLU函数更受青睐,这是因为它可以将神经网络的训练速度提升数倍,而并不会对模型的泛化准确度造成显著影响。 layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), #池化层1,2*2采样 layers.MaxPooling2D((2, 2)), # 设置二维卷积层2,设置64个3*3卷积核,activation参数将激活函数设置为ReLu函数 layers.Conv2D(64, (3, 3), activation='relu'), #池化层2,2*2采样 layers.MaxPooling2D((2, 2)), layers.Flatten(), #Flatten层,连接卷积层与全连接层 layers.Dense(64, activation='relu'), #全连接层,特征进一步提取,64为输出空间的维数,activation参数将激活函数设置为ReLu函数 layers.Dense(10) #输出层,输出预期结果,10为输出空间的维数 ]) # 打印网络结构 model.summary()
2026-01-08 18:49:53.891561: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 AVX512F AVX512_VNNI FMA To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags. 2026-01-08 18:49:55.030714: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1532] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 10099 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3080 Ti, pci bus id: 0000:5e:00.0, compute capability: 8.6 Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 26, 26, 32) 320 max_pooling2d (MaxPooling2D (None, 13, 13, 32) 0 ) conv2d_1 (Conv2D) (None, 11, 11, 64) 18496 max_pooling2d_1 (MaxPooling (None, 5, 5, 64) 0 2D) flatten (Flatten) (None, 1600) 0 dense (Dense) (None, 64) 102464 dense_1 (Dense) (None, 10) 650 ================================================================= Total params: 121,930 Trainable params: 121,930 Non-trainable params: 0 _________________________________________________________________

2.2.编译模型

""" 这里设置优化器、损失函数以及metrics model.compile()方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准 """ model.compile( # 设置优化器为Adam优化器 optimizer='adam', # 设置损失函数为交叉熵损失函数(tf.keras.losses.SparseCategoricalCrossentropy()) # from_logits为True时,会将y_pred转化为概率(用softmax),否则不进行转换,通常情况下用True结果更稳定 loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), # 设置性能指标列表,将在模型训练时监控列表中的指标 metrics=['accuracy'])

2.3.训练模型

""" 这里设置输入训练数据集(图片及标签)、验证数据集(图片及标签)以及迭代次数epochs 关于model.fit()函数的具体介绍可参考我的博客: https://blog.csdn.net/qq_38251616/article/details/122321757 """ history = model.fit( # 输入训练集图片 train_images, # 输入训练集标签 train_labels, # 设置10个epoch,每一个epoch都将会把所有的数据输入模型完成一次训练。 epochs=10, # 设置验证集 validation_data=(test_images, test_labels))
Epoch 1/10 2026-01-08 18:51:21.815488: I tensorflow/stream_executor/cuda/cuda_dnn.cc:384] Loaded cuDNN version 8101 2026-01-08 18:51:24.686085: I tensorflow/stream_executor/cuda/cuda_blas.cc:1786] TensorFloat-32 will be used for the matrix multiplication. This will only be logged once. 1875/1875 [==============================] - 14s 4ms/step - loss: 0.6748 - accuracy: 0.7807 - val_loss: 0.3137 - val_accuracy: 0.9037 Epoch 2/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.2385 - accuracy: 0.9280 - val_loss: 0.1592 - val_accuracy: 0.9516 Epoch 3/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.1465 - accuracy: 0.9559 - val_loss: 0.1082 - val_accuracy: 0.9665 Epoch 4/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.1113 - accuracy: 0.9657 - val_loss: 0.0896 - val_accuracy: 0.9729 Epoch 5/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0913 - accuracy: 0.9717 - val_loss: 0.0877 - val_accuracy: 0.9732 Epoch 6/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0796 - accuracy: 0.9758 - val_loss: 0.0700 - val_accuracy: 0.9780 Epoch 7/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0712 - accuracy: 0.9777 - val_loss: 0.0613 - val_accuracy: 0.9816 Epoch 8/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0638 - accuracy: 0.9802 - val_loss: 0.0712 - val_accuracy: 0.9759 Epoch 9/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0584 - accuracy: 0.9814 - val_loss: 0.0574 - val_accuracy: 0.9815 Epoch 10/10 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0550 - accuracy: 0.9830 - val_loss: 0.0509 - val_accuracy: 0.9844

3、模型预测

plt.imshow(test_images[1])
<matplotlib.image.AxesImage at 0x7f917a9d5100>

pre = model.predict(test_images) # 对所有测试图片进行预测 pre[1] # 输出第一张图片的预测结果
313/313 [==============================] - 1s 2ms/step array([ 4.0916557, 8.121223 , 17.289515 , -1.078687 , -17.282494 , -4.956851 , -0.79667 , -10.196654 , 4.119256 , -14.890562 ], dtype=float32)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强烈安利8个AI论文网站,自考学生轻松搞定毕业论文!

强烈安利8个AI论文网站&#xff0c;自考学生轻松搞定毕业论文&#xff01; 自考论文的“救星”&#xff1a;AI 工具如何改变你的写作方式 对于自考学生来说&#xff0c;撰写毕业论文往往是一项既耗时又充满挑战的任务。从选题到结构搭建&#xff0c;再到内容撰写和查重降重&…

热电联产在综合能源系统中的选址定容研究Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

广汽与华为签署全面合作框架协议,深化鸿蒙生态与AI融合

华为ai 2026年1月5日&#xff0c;广汽集团与华为终端在广州签署全面合作框架协议&#xff0c;标志着双方战略合作进一步升级至生态融合新阶段。华为常务董事、终端BG董事长余承东一行到访广汽集团番禺总部&#xff0c;与广汽集团董事长冯兴亚等高层就智能汽车技术演进、产业协同…

别再说Redis是单线程了,这才是它真正的线程模型

“Redis是单线程的。” 这句话你可能听过无数遍。面试官问你Redis为什么快,你脱口而出:"因为它是单线程的,避免了线程切换开销。"面试官满意地点点头,你也觉得自己答对了。 但这个答案,只对了一半。 从Redis 6.0开始,Redis就不再是纯粹的单线程了。它引入了…

为什么WiFi已连接却有感叹号?4种方法修复

在使用电脑连接Wi-Fi时&#xff0c;你是否遇到过无线网络图标旁边出现黄色感叹号的情况&#xff1f;这通常表示网络连接存在问题&#xff0c;导致无法正常上网。下面就为大家分享几种解决方法&#xff0c;帮助你快速恢复网络连接。 方法1&#xff1a;检查路由器与宽带是否正常 …

【开题答辩全过程】以 基于SSM的固定资产管理系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

基于多能互补的热电联供型微网优化运行Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

【开题答辩全过程】以 高校失物招领信息管理系统的设计与开发为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【AlohaMini学习笔记】第二天:初见LeRobot

LeRobot&#xff1a;面向嵌入式AI的开源机器人控制框架 在嵌入式人工智能&#xff08;Embodied AI&#xff09;研究快速发展的当下&#xff0c;机器人控制框架的“易用性、兼容性、低成本”成为推动技术普惠化的关键。 由Hugging Face主导开发的LeRobot正是这样一款面向科研与教…

综合项目实战--电子商城项目

一、摘要本研究设计并实现了一款基于 Linux 平台的轻量级商品展示与查询 Web 系统。系统采用 C 语言开发&#xff0c;通过 Socket 网络编程构建 Web 服务器&#xff0c;集成 SQLite 嵌入式数据库实现数据存储与查询&#xff0c;核心功能涵盖用户登录验证、商品列表展示、关键字…

更高效更智能,华为MatePad 11.5 S解锁高效学习体验

华为鸿蒙系统官网入口 "华为MatePad11.5S搭载超清护眼柔光屏&#xff0c;书写如纸般流畅&#xff1b;HarmonyOS6带来15%流畅度提升与AI智慧功能&#xff0c;从解题到办公全场景重构生产力体验&#xff0c;轻薄机身更适配移动学习。" 临近年末&#xff0c;华为MatePad…

护眼灯品牌排行第一名是谁?权威第一护眼灯品牌曝光,护眼超安心

儿童青少年近视率居高不下&#xff0c;劣质台灯更是雪上加霜&#xff01;权威数据显示&#xff0c;孩子每天被劣质光线照射1小时&#xff0c;半年内近视度数就可能明显上涨。可护眼台灯市场鱼龙混杂&#xff0c;虚假宣传、参数造假层出不穷&#xff0c;家长想给孩子选到靠谱的灯…

AI赋能智能客服:节庆日用品的爆单应对与服务升级核心

一、行业核心矛盾&#xff1a;短周期爆单与场景化适配的双重困境节庆日用品电商以窗花、对联等季节性品类为核心&#xff0c;交易呈现强周期性、爆发式订单特征。节日前30天订单量达平日15-20倍&#xff0c;传统人工客服响应滞后&#xff0c;排队时长超10分钟&#xff0c;用户流…

华为全场景新品发布,智慧时尚的数字生活由此开启

华为主题下载 3月16日&#xff0c;2022华为全屋智能及全场景新品春季发布会正式举办。伴随着全屋Wi-Fi、智能门锁、便携智能音箱HUAWEISoundJoy、HUAWEIP50系列新色、HUAWEInova9SE、HUAWEIMatePadPaper、HUAWEIFreeBuds4E等多款新品发布&#xff0c;华为终端云服务充分发挥…

ToDesk共享屏幕拍照教程,超详细指南

喜欢被拍照但奈何身边的亲友却技术不佳经常无法帮助自己拍摄到令人满意的照片怎么办&#xff1f;一遍一遍重拍不仅有点折腾人并且消磨耐心和情绪也难高效和开心。难道对此就没有其他解决之道了吗&#xff1f;当然不是&#xff0c;通过ToDesk远程控制完成共享屏幕拍照就能轻松搞…

个人数据管理系统

个人数据管理系统一、系统概述该系统基于SpringBoot框架开发&#xff0c;目的是为用户提供个人信息管理的服务。系统功能包括用户登录与权限管理、个人信息管理、数据导入导出、安全与隐私保护等模块。系统设计时注重用户数据的安全性和隐私保护&#xff0c;采用MD5加密存储用户…

智能表格识别技术融合深度学习与计算机视觉,突破传统表格数字化瓶颈

当财务人员面对跨页合并的财务报表&#xff0c;当法务团队需要从数百页合同附件中提取数据&#xff0c;当研究人员试图分析历年格式不一的统计报表时&#xff0c;表格数字化的巨大成本与误差始终难以避免。一种基于深度学习与计算机视觉的表格识别解决方案&#xff0c;直击这一…

【开题答辩全过程】以 农田水井灌溉系统为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

技术团队OKR季度/年度复盘全指南:从流程落地到效能提升

在技术驱动的企业中&#xff0c;OKR&#xff08;目标与关键成果&#xff09;不仅是战略落地的工具&#xff0c;更是团队协同、效能提升的核心抓手。而复盘作为OKR闭环的最后一环&#xff0c;其价值远超总结进度——对技术团队而言&#xff0c;它既是检验技术目标合理性、沉淀研…

【力扣hot100题】除了自身以外数组的乘积(11)

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…