【卷积神经网络】MNIST 手写体识别

LeNet-5 是经典卷积神经网络之一,1998 年由 Yann LeCun 等人在论文 《Gradient-Based Learning Applied to Document Recognition》中提出。LeNet-5 网络使用了卷积层、池化层和全连接层,实现可以应用于手写体识别的卷积神经网络。TensorFlow 内置了 MNIST 手写体数据集,可以很方便地读取数据集,并应用于后续的模型训练过程中。本文主要记录了如何使用 TensorFlow 2.0 实现 MNIST 手写体识别模型。

目录

1 数据集准备

2 模型建立

3 模型训练


1 数据集准备

        TensorFlow 内置了 MNIST 手写体数据集,安装 TensorFlow 之后,使用如下代码就可以加载 MNIST 数据集:

import tensorflow as tf

mnist = tf.keras.datasets.mnist
(train_x, train_y), (test_x, test_y) = mnist.load_data()

        使用 Matplotlib 查看前 25 张图片,并打印对应的标签。

from matplotlib import pyplot as plt

# 查看训练集
plt.figure(figsize=(3,3))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.imshow(train_x[i], cmap=plt.cm.binary)
    plt.xticks([])
    plt.yticks([])
plt.show()

        接着,使用 tf.one_hot() 函数,对图像的标签进行独热码编码。

# 预处理
train_y = tf.one_hot(train_y, depth=10)
test_y = tf.one_hot(test_y, depth=10)

2 模型建立

        MNIST 手写体数据集中,每张图像的大小是 28 × 28 × 1,按照 LeNet-5 模型的思路,构建卷积神经网络模型。选择 5 × 5 的卷积核,卷积层之后是 2 × 2 的平均池化,激活函数选择 sigmoid(除了最后一层)。

# the first layer can receive an 'input_shape' argument
model = tf.keras.models.Sequential([
   tf.keras.layers.Conv2D(filters=6,kernel_size=5,padding='valid',activation='sigmoid',input_shape=(28,28,1)),
   tf.keras.layers.AveragePooling2D(pool_size=(2,2),strides=2,padding='valid'),
   tf.keras.layers.Conv2D(filters=16,kernel_size=5,padding='valid',activation='sigmoid'),
   tf.keras.layers.AveragePooling2D(pool_size=(2,2),strides=2,padding='valid'),
   tf.keras.layers.Flatten(),
   tf.keras.layers.Dense(120,activation='sigmoid'),
   tf.keras.layers.Dense(84,activation='sigmoid'),
   tf.keras.layers.Dense(10,activation='softmax')
])

        使用 model.summary() 查看模型信息。

model.summary()

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 24, 24, 6)         156       
                                                                 
 average_pooling2d (AverageP  (None, 12, 12, 6)        0         
 ooling2D)                                                       
                                                                 
 conv2d_1 (Conv2D)           (None, 8, 8, 16)          2416      
                                                                 
 average_pooling2d_1 (Averag  (None, 4, 4, 16)         0         
 ePooling2D)                                                     
                                                                 
 flatten (Flatten)           (None, 256)               0         
                                                                 
 dense (Dense)               (None, 120)               30840     
                                                                 
 dense_1 (Dense)             (None, 84)                10164     
                                                                 
 dense_2 (Dense)             (None, 10)                850       
                                                                 
=================================================================
Total params: 44,426
Trainable params: 44,426
Non-trainable params: 0
_________________________________________________________________

3 模型训练

        使用 compile() 函数配置模型,优化算法为 Adam 算法,学习率为 0.001,损失函数为交叉熵损失函数。

# 模型配置
model.compile(
   optimizer=tf.keras.optimizer.Adam(learning_rate=1e-3),
   loss=tf.keras.losses.CategoricalCrossentropy(),
   metrics=['accuracy']
)

# 模型训练
model.fit(
   x=train_x,
   y=train_y,
   validation_split=0.0,
   epochs=10
)

Epoch 1/10
1875/1875 [==============================] - 72s 38ms/step - loss: 0.5806 - accuracy: 0.8206
Epoch 2/10
1875/1875 [==============================] - 70s 37ms/step - loss: 0.1254 - accuracy: 0.9620
Epoch 3/10
1875/1875 [==============================] - 75s 40ms/step - loss: 0.0870 - accuracy: 0.9735
Epoch 4/10
1875/1875 [==============================] - 82s 43ms/step - loss: 0.0699 - accuracy: 0.9785
Epoch 5/10
1875/1875 [==============================] - 69s 37ms/step - loss: 0.0604 - accuracy: 0.9809
Epoch 6/10
1875/1875 [==============================] - 68s 36ms/step - loss: 0.0530 - accuracy: 0.9833
Epoch 7/10
1875/1875 [==============================] - 72s 38ms/step - loss: 0.0477 - accuracy: 0.9854
Epoch 8/10
1875/1875 [==============================] - 70s 38ms/step - loss: 0.0436 - accuracy: 0.9863
Epoch 9/10
1875/1875 [==============================] - 70s 37ms/step - loss: 0.0399 - accuracy: 0.9873
Epoch 10/10
1875/1875 [==============================] - 68s 36ms/step - loss: 0.0357 - accuracy: 0.9883
<keras.callbacks.History at 0x20a56b65660>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法与数据结构(十)--图的入门

一.图的定义和分类 定义&#xff1a;图是由一组顶点和一组能够将两个顶点连接的边组成的。 特殊的图&#xff1a; 1.自环&#xff1a;即一条连接一个顶点和其自身的边; 2.平行边&#xff1a;连接同一对顶点的两条边&#xff1b; 图的分类&#xff1a; 按照连接两个顶点的边的…

Kafka3.0.0版本——Follower故障处理细节原理

目录 一、服务器信息二、服务器基本信息及相关概念2.1、服务器基本信息2.2、LEO的概念2.3、HW的概念 三、Follower故障处理细节 一、服务器信息 三台服务器 原始服务器名称原始服务器ip节点centos7虚拟机1192.168.136.27broker0centos7虚拟机2192.168.136.28broker1centos7虚拟…

keepalived+lvs(DR)

目录 一&#xff0c;作用 二&#xff0c;调度器配置 1&#xff0c;安装keepalived 2&#xff0c; 安装ipvsadm 3&#xff0c; 配置keepalived 4. 查看lvs节点状态 5&#xff0c; web节点配置 1.1 调整ARP参数 1.2 配置虚拟IP地址 1.3添加回环路由 1.4安装nginx并写…

Boost开发指南-4.11config

config config库主要是提供给Boost库开发者&#xff08;而不是库用户&#xff09;使用&#xff0c;它将程序的编译配置分解为三个正交的部分&#xff1a;平台、编译器和标准库&#xff0c;帮助他们解决特定平台特定编译器的兼容问题。 一般来说&#xff0c;config库不应该被库…

Redis常用数据类型及命令

Redis 常用数据类型 常用数据类型 主要是指value类型 key都是字符串类型的 各种数据类型对应的特点 应用场景 哈希&#xff1a;一般来存储一些对象 列表&#xff1a;存一些跟顺序有关系的数据&#xff0c;比如朋友圈点赞 集合&#xff1a;一般用来做运算&#xff0c;交集&a…

SQL注入之联合查询

文章目录 联合查询是什么&#xff1f;联合查询获取cms账号密码尝试登录 联合查询是什么&#xff1f; 适用数据库中的内容会回显到页面中来的情况。联合查询就是利用union select 语句&#xff0c;该语句会同时执行两条select 语句&#xff0c;实现跨库、跨表查询。 必要条件 两…

实验三十一、OCL 电路输出功率和效率的研究

一、题目 研究 OCL 功率放大电路的输出功率和效率。 二、仿真电路 OCL 功率放大电路如图1所示。 图 1 OCL 功率放大电路 图1\,\,\,\textrm{OCL}\,功率放大电路 图1OCL功率放大电路图中采用 NPN 型低频功率晶体管 2SC2001&#xff0c;其参数为&#xff1a; I C M 700 mA I_…

Java实现根据商品ID获取1688商品详情跨境属性数据,1688商品重量数据接口,1688API接口封装方法

要通过1688的API获取商品详情跨境属性数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台的开发者…

Vue的使用(2)

一个简单的Vue项目的创建 创建一个UserList.vue组件 在App.vue中使用该组件 使用组件的第一步&#xff0c;导入组件使用组件的第二部&#xff0c;申明这个组件使用组件的第三步&#xff1a;引用组件 结果&#xff1a; 事件和插值语法 <template> <div><!-- te…

08-pandas 入门-pandas的数据结构

要使用pandas&#xff0c;你首先就得熟悉它的两个主要数据结构&#xff1a;Series和DataFrame。虽然它们并不能解决所有问题&#xff0c;但它们为大多数应用提供了一种可靠的、易于使用的基础。 一、Series Series是一种类似于一维数组的对象&#xff0c;它由一组数据&#x…

专业制造一体化ERP系统,专注于制造工厂生产管理信息化,可定制-亿发

制造业是国民经济的支柱产业&#xff0c;对于经济发展和竞争力至关重要。在数字化和智能化趋势的推动下&#xff0c;制造业正处于升级的关键时期。而ERP系统&#xff0c;即企业资源计划系统&#xff0c;能够将企业的各个业务环节整合起来&#xff0c;实现资源的有效管理和信息的…

Web项目与帆软11集成后通过项目访问cpt文件会弹出数据决策系统登录界面如何取消

1、登录帆软 - 数据决策系统 * 点击 &#xff1a;管理系统 - 模板认证 - 点击设置按钮 - 关闭 2、选择关闭单个认证 你点击后&#xff0c;它默认所有都是开的。你依次点击关闭&#xff0c;然后再把要的模板点击开启&#xff0c;如下图所示&#xff1a;第一个就表示开了认证&am…

NB水表和LoRa水表有哪些不同之处?

NB水表和LoRa水表是两种目前市场上常见的智能水表&#xff0c;它们在功能、性能、应用场景等方面存在一些不同之处。 一、技术方面 NB水表采用NB-IoT技术&#xff0c;而LoRa水表采用LoRa技术。NB-IoT技术是窄带物联网技术&#xff0c;它具有良好的低功耗、低成本、高覆盖、高可…

vue 转盘抽奖功能,可控制抽奖概率

实现逻辑&#xff1a; 思路&#xff1a;首先需要一个转盘&#xff0c;然后需要一个抽奖按钮定位在中间&#xff0c;图片提前设计或者用背景颜色代替&#xff08;这里用的是图片&#xff0c;然后计算概率&#xff09;&#xff0c;使用css完成转动效果&#xff0c;每次转动完成之…

游戏中的图片打包流程,免费的png打包plist工具,一款把若干资源图片拼接为一张大图的免费工具

手机游戏开发中&#xff0c;为了提高图片渲染性能&#xff0c;经常需要将小图片合并成一张大图进行渲染。如果手工来做的话就非常耗时。TexturePacker就是一款非常不错方便的处理工具。TexturePacker虽然非常优秀&#xff0c;但不是免费的。 对于打包流程&#xff0c;做游戏的…

大数据项目实战(Sqoop安装)

一&#xff0c;搭建大数据集群环境 1.4 Sqoop安装 1.sqoop安装 &#xff08;1&#xff09;上传安装包 &#xff08;2&#xff09;解压安装包 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /export/servers &#xff08;3&#xff09;重命名 mv sqoop-1.4.6.b…

继承AndroidView Model的错误

ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码&#xff0c;总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索&#xff0c;终于找…

发光太阳聚光器的蒙特卡洛光线追踪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JVM 内存大对象监控和优化实践

作者&#xff1a;vivo 互联网服务器团队 - Liu Zhen、Ye Wenhao 服务器内存问题是影响应用程序性能和稳定性的重要因素之一&#xff0c;需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践&#xff0c;其次在故障转移与…

【AI】数学基础——高数(积分部分)

高数&#xff08;函数&微分部分&#xff09; 文章目录 1.4 微积分1.4.1 基本思想1.4.2 定积分定义定义计算定积分定积分性质定理N-L公式泰勒公式麦克劳林公式 1.5 求极值1.5.1 无条件极值1.5.2 条件极值1.5.3 多条件极值1.5.4 凹函数与凸函数 1.4 微积分 用于求解速度、面积…