热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

keras实现mnist手写数字识别

卷积神经网络实现这个代码的话是跟着B站博主敲得里面也解析了代码想深入了解的可以看看链接地址一.实验目的利用keras的深度学习框架,分类mnist手写数字识别数

卷积神经网络实现

这个代码的话是跟着B站博主敲得 里面也解析了代码 想深入了解的可以看看
链接地址


一. 实验目的

利用keras的深度学习框架,分类mnist手写数字识别数据集


二. 实验内容

1.获得mnist数据,并将mnist数据处理成合适的格式;
2.构建神经网络模型:
3.配置训练参数;
4.训练网络;
5.测试训练好的网络模型


三.概要设计

1.实验原理
①获得mnist数据,并将数据处理成合适的格式:
首先查看数据集是怎样的,让图片由二维铺开成一维,相当于将图片从二维矩阵(28*28)到784像素值的一个向量,同时将数据格式转换为浮点型;
②按照自己的设计搭建神经网络:
在这里插入图片描述
③设定合适的参数训练神经网络:
a.编译:确定优化器和损失函数;
b.训练网络:确定训练的数据、训练的轮数和每次训练的样本数等;
④在测试集上评价训练效果:
a.利用损失函数变化和训练集的准确率评估它在数据集上的表现:
损失函数逐渐下降,训练集的准确率逐渐提升;
b.用训练好的模型进行预测,并在测试集上进行评价。
2.网络作用
神经网络是机器学习诸多算法中的一种,它既可以用来做有监督的任务,如分类、视觉识别等,也可以用作无监督的任务。同时它能够处理复杂的非线性问题,它的基本结构是神经元。,如下图所示:在这里插入图片描述
其中,x1、x2、x3代表输入,中间部分为神经元,而最后的hw,b(x)是神经元的输出。整个过程可以理解为输入——>处理——>输出。
由多个神经元组成的就是神经网络
在这里插入图片描述
如图所示:
这是一个4层结构的神经网络,layer1为输入层,layer4为输出层,layer2,layer3为隐藏层,即神经网络的结构由输入层,隐藏层,输出层构成。其中除了输入层以外,每一层的输入都是上一层的输出。
而现在所用的卷积神经网络是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神经网络能够接受多个特征图作为输入,而不是向量。
3.各个网络层的功能描述
第一层——输入层:
输入层每个神经单元直接对应原始数据,然后向隐藏层提供信息,图片的每一个像素都需要输入层神经元与之对应,对原始图像数据进行预处理,而我们的每个图片大小包含784像素,输入层需要784个神经元;
第二层——隐藏层(中间层):
隐藏层每个神经单元对不同的输入层神经单元有不同的权重,从而偏向于对某种识别模式兴奋,隐藏层为15个神经元;
第三层——输出层:
多个隐藏层的神经单元兴奋后,输出层的神经单元根据不同隐藏层的兴奋加上权重后,给到不同的兴奋度,这个兴奋度就是模型最终识别的结果,它的神经元个数是确定的,一共为10类,10个神经元


四.详细设计

1.网络结构图
(用 print(network.summary()) 打印)
在这里插入图片描述

2.各个参数设计

①修改训练集及测试集的图片(28*28像素)从二维矩阵到一维向量:
train_images = train_images.reshape((60000, 28, 28, 1)).astype(‘float’) / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype(‘float’) / 255
将数据格式转换为浮点型
②训练网络参数:
network.fit(train_images, train_labels, epochs=10, batch_size=128, verbose=2)
epochs:训练多少个回合,
batch_size:每次训练给多大的数据
verbose = 2 为每个epoch输出一行记录
③变量类型及大小:
在这里插入图片描述


五.测试数据及运行结果

1.正常测试数据和运行结果
①取前五个图片进行预测(结果正常):
在这里插入图片描述
②取前10个图片进行预测(结果正常):

在这里插入图片描述

3.实验结果分析
通过多轮测试集的测试,发现训练效果基本符合,并且打印出训练集和测试集的准确率发现拟合基本相符,准确率如图所示:
在这里插入图片描述


六.调试情况,设计技巧及体会

1.改进方案
①实验一开始训练集和测试集的准确率低:原来隐藏层个数为15,现在增加到84;
②训练集比测试集拟合的更好:使用正则化 dropout解决
2.体会
一开始根据老师发的教程进行安装,发现运行起来导入库的速度较慢,于是在网上搜索发现Anaconda是一个集成库,于是便开始了安装它,过程比较艰辛,索性安装成功了,最后跑代码的结果很快。
在运行代码的过程中,发现版本更新运行后代码也发生了相应的变化,对此进行了改进。本次应用的是卷积神经网络,它常用来分析视觉图像,十分符合我们这次的实验要求。每次不同的课题,我们对网络模型的选择也是非常重要的。
这个实验我们在课上做了两三次,每次运行代码都会有新的改进收获匪浅。通过CSDN博客,我学习到了tensorflow框架的基本使用方法,通过python和tensorflow进行了神经网络的构造和实现,并通过神经网络实现了手写数字识别的功能。
通过这次实验,我觉得机器学习是个特别有意思的学科,可以进行爬虫和数据预测等,通过自己的努力看到实验的准确率稳步上升,成就感满满。在以后的学习生活中,我会以更大的兴趣投入其中,并深入学习神经网络的内容。fighting!!!

代码实现:

from tensorflow.keras.utils import to_categorical
from tensorflow.keras import models, layers
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.datasets import mnist
# 加载数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()# 搭建LeNet网络 神经网络的模型
def LeNet():network = models.Sequential()network.add(layers.Conv2D(filters=6, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))network.add(layers.AveragePooling2D((2, 2)))network.add(layers.Conv2D(filters=16, kernel_size=(3, 3), activation='relu'))network.add(layers.AveragePooling2D((2, 2)))network.add(layers.Conv2D(filters=120, kernel_size=(3, 3), activation='relu'))network.add(layers.Flatten())network.add(layers.Dense(84, activation='relu'))network.add(layers.Dense(10, activation='softmax'))return network
network = LeNet()
network.compile(optimizer=RMSprop(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])#将图片由二维铺开成一维(相当于将图片从二维矩阵到一维向量)
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
print(test_labels[0])
# 训练网络,用fit函数, epochs表示训练多少个回合, batch_size表示每次训练给多大的数据
network.fit(train_images, train_labels, epochs=10, batch_size=1280, verbose=2)#print(network.summary())
#测试集测试模型性能 取前五张图片
y_pre = network.predict(test_images[:10])
print(y_pre,test_labels[:10])
test_loss, test_accuracy = network.evaluate(test_images, test_labels)
print("test_loss:", test_loss, " test_accuracy:", test_accuracy)

推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 本文将深入探讨生成对抗网络(GAN)在计算机视觉领域的应用。作为该领域的经典模型,GAN通过生成器和判别器的对抗训练,能够高效地生成高质量的图像。本文不仅回顾了GAN的基本原理,还将介绍一些最新的进展和技术优化方法,帮助读者全面掌握这一重要工具。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • DRF框架中Serializer反序列化验证机制详解:深入探讨Validators的应用与优化
    在DRF框架的反序列化验证机制中,除了基本的字段类型和长度校验外,还常常需要进行更为复杂的条件限制校验。通过引入`validators`模块,可以实现自定义校验逻辑,如唯一字段校验等。本文将详细探讨`validators`的使用方法及其优化策略,帮助开发者更好地理解和应用这一重要功能。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • Nginx不仅是一款轻量级的高性能Web服务器,还具备出色的负载均衡和反向代理功能。它支持复杂的正则匹配规则、动静内容分离以及灵活的URL重写功能,使得配置和管理更加便捷高效。此外,Nginx提供了多种负载均衡算法,如轮询、加权轮询、最少连接数等,以满足不同应用场景的需求。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 在启用分层编译的情况下,即时编译器(JIT)的触发条件涉及多个因素,包括方法调用频率、代码复杂度和运行时性能数据。本文将详细解析这些条件,并探讨分层编译如何优化JVM的执行效率。 ... [详细]
author-avatar
UP向日葵氵于磊Z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有