深度学习之TensorFlow使用CNN测试Cifar-10数据集(Python实现)

该博客详细介绍了如何利用Python和TensorFlow搭建卷积神经网络(CNN)对Cifar-10数据集进行图像分类。首先,介绍了数据集和安装TensorFlow的步骤,接着讲述了如何构建包含2个卷积层和3个全连接层的CNN模型,使用L2正则化、数据增强和LRN层提高模型性能。最后,通过训练和测试,展示了模型在不同迭代次数下的准确率,最高达到79.1%。

题目描述:

1. 对Cifar-10图像数据集,用卷积神经网络进行分类,统计正确率。

2.选用Caffe, Tensorflow, Pytorch等开 源深度学习框架之一,学会安装这些框架并调用它们的接口。

3.直接采用这些深度学习框架针对Cifar-10数据集已训练好的网络模型,只做测试。

实现流程:                                                                          

第一步:安装Tensorflow环境。打开命令控制符窗口,使用python自带的pip工具,输入命令:pip install tensorflow进行下载安装如图1 所示:

                                                                                    图 1 安装TensorFlow

第二步:下载Cifar-10图像数据集。

(官网上下载即可http://www.cs.toronto.edu/~kriz/cifar.html)如图2所示

                                                                                         图 2下载Cifar-10

第三步:编写代码,进行训练测试。

首先,对Cifar-10图像数据集进行介绍。这是一个经典的数据集,包含了60000张32*32的彩色图像,其中训练集50000张,测试集10000张,如同其名字,CIFAR-10数据集一共标注为10类,每一类6000张图片,这10类分别是airplane、automobile、bird、cat、deer、dog、frog、horse、ship和truck。类别之间没有重叠,也不会一张图片中出现两类物体。

然后,建立卷积神经网络模型CNN。并且添加一些新功能:

(1)对权重weights进行L2正则化;

(2)对图片数据进行数据增强,即对图片进行翻转、随机剪切等操作,制造了更多的样本;

(3)在每个卷积-池化层后使用了LRN层(局部相应归一化层),增强了模型的泛化能力。

建立2个卷积层,3个全连接层:

创建第一个卷积层,首先通过损失函数创建卷积核的参数并进行初始化,卷积核尺寸为5*5,3个颜色通道,64个卷积核(卷积核深度为64),设置weight初始化标准差为0.05,不对第一层卷积层的weight进行L2正则化处理,即wl设为0。在ReLU激活函数之后,我们采用一个3*3的步长为2*2的池化核进行最大池化处理(注意这里最大池化的尺寸和步长不一致),这样可以增加数据的丰富性。随后我们使用tf.nn.lrn()函数,即对结果进行LRN处理。LRN层(局部响应归一化层)模仿了生物神经系统的“侧抑制”机制,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。LRN对ReLU这种没有上限边界的激活函数比较试用,不适合于Sigmoid这种有固定边界并且能抑制过大值的激活函数。

创建第二个卷积层,和创建第一个卷积层一样,只不过这里的权重weight的shape中,通道数为64,bias初始化为0.1,最后的最大池化层和LRN层调换了顺序,先进行LRN层处理后进行最大池化处理。

创建第一个全连接层,首先将卷积层的输出的样本都reshape为一维向量,获取每个样本的长度后作为全连接层的输入单元数,输出单元数设为384。权重weight初始化并设置L2正则化系数为0.004,我们希望这一层全连接层不要过拟合。

创建第二个全连接层,和第一个全连接层相似,只不过把隐含单元减少一半为192。

创建第三个全连接层,和第一个全连接层相似,只不过把隐含单元变为10。

整个网络的inference部分已经完成,网络结构如表1所示:

Layer名称

描述

 

 

 

卷积层

conv1

实现卷积和修正线性激活

pool1

最大池化(max pooling)

norm1

局部响应归一化

conv2

实现卷积和修正线性激活

norm2

局部响应归一化

pool2

最大池化(max pooling)

 

全连接层

local3

基于修正线性激活的全连接层

local4

基于修正线性激活的全连接层

logits

进行线性变换以输出logits

                                                                              &n

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值