卷积神经网络实现
这个代码的话是跟着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ÿ