题目描述:
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

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

被折叠的 条评论
为什么被折叠?



