keras实现cnn模型代码

利用keras 实现cnn模型,关键在于:
(1)原始数据的处理。(可输入的格式)
(2)卷积层、池化层、全连接层的搭建
(3)各层对输入数据的size变化。

1.库的导入

在这里插入图片描述
np_utils库中的功能,应该就是对label进行one-hot处理一类的操作。

from models import Sequential 是keras搭建模型的一种框架,Sequential是一系列网络层按顺序构成的栈。
将一些网络层通过.add()堆叠起来,就构成了一个模型。

from models.layers import dense, activation, convolution2D, maxpooling2d, flatten 是导入的模型中的各个网络层。

dense:全连接神经网络层;
activation:激活函数;
convolution2D:卷积层
maxpooling2D:池化层
Flatten:用于数据的多维转换为一维,实现卷积层到全连接层的转换。

optimizer是模型的优化器,不同的优化器主要是在对学习率上的处理有所不同。

2.输入数据的处理
在这里插入图片描述
训练集的输入格式是600002828,是指一共60000个样本,每个样本是2828的像素图。由于数据是黑白数据,因此没有RGB的维度。
在这里插入图片描述
因为CNN模型的标准格式是出入长
宽*高,高其实就是图像的颜色,改数据中没有高这一维度,所以要通过reshape增加一个维度。
缺少RGB的维度,因此在原数据的样本数之后添加了色彩维度,由于是黑白图片,该维度为1。其实就是高度为1。
除以255,是为了归一化。其实还有其他的方法,进行归一化。

3.模型搭建
在这里插入图片描述

model=Sequential()就是使用keras框架的方便之处,通过add的方式将网络的各个层加起来,后面只需针对各个层进行设计,最终通过add构建模型。

第一个卷积层:
卷积层中最重要的就是滤波器(filter),通过使用filter对原始数据进行特征提取。所以在卷积层中,就是对filter设计,分别有个数,尺寸,和padding。一般filter的尺寸为33或者55。个数由少到多,成倍增加。
该案例中,filter的个数为32,尺寸为5*5。

激活函数在这里插入图片描述
卷积层后添加激活函数。激活函数有很多种,包括sigmoid,tanh。。。

池化层

在这里插入图片描述

池化层主要对卷积层提取的数据进行特征简化,其中包括最大池化,和平均池化。经过一次池化,原本的数据尺寸长宽都会减少一半。本案例中,经过第一次池化,长宽由2828变为1414。

第二层卷积层、激活函数、池化层。

在这里插入图片描述
铺平

特征提取之后,需要输入全连接层。但是,由于卷积之后的得到是多维图像(由于多个filter,有多少个filter就有多少个图片),无法直接输出至全连接层dense,因此中间需要flatten将得到的多个特征图进行铺平。
在这里插入图片描述

全连接层

最后通过全连接层对提取的特征进行一个特征降维吧,然后输出类别个数。

优化器
在这里插入图片描述
最后将优化器定义,其实就是定义学习率。

模型编译
在这里插入图片描述
设计模型的损失函数,该案例的损失函数为categorical_crossentropy(交叉熵损失函数),多分类中就是用交叉熵损失函数。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值