上一篇文章简单介绍了卷积神经网络的结构,本篇文章则会利用上一篇文章的理论知识搭建神经网络模型来识别CIFAR-10图像。
2.Keras卷积神经网络识别CIFAR-10图像
首先简单介绍一下什么是CIFAR-10,CIFAR-10是是用于对象识别的已建立的计算机视觉数据集。它是8000万个微小图像数据集的一个子集,由60,000个32x32彩色图像组成,包含10个对象类别中的一个,每个类别有6000个图像。它由Alex Krizhevsky,Vinod Nair和Geoffrey Hinton收集。其中,这10个对象类别分别是飞机,汽车,鸟,猫,鹿,狗,青蛙,马,船,卡车。我们的目的就是尽最大努力把这些图片分入到正确的类别中。
2.1数据预处理
(1)首先导入所需要的模块和数据
from keras.datasets import cifar10 #下载CIFAR-10数据集
import numpy as np
np.random.seed(10) #设置seed产生需要的随机数
import matplotlib.pyplot as plt
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation,Flatten
from keras.layers import Conv2D,MaxPooling2D,ZeroPadding2D
import pandas as pd
(2)读取下载的数据集
(x_img_train,y_label_train),(x_img_test,y_label_test)=cifar10.load_data()
我们看一下训练集与测试集的图像和标签的大小和形状
print(x_img_train.shape)
print(y_label_train.shape)
print(x_img_test.shape)
print(y_label_test.shape)
运行结果
可以看到,训练集中有50000个大小为32x32的三原色图,而测试集有10000个大小为32x32的三原色图,最后那个3代表图像是一个RGB三原色图。
(3) 建立一个dict,定义每一个数字所代表的图像类别的名称
label_dict={
0:'airplay',1:'automobile',2:'bird',3:'cat',4:'deer',5:'dog',6:'frog',7:'horse',8:'ship',9:'truck'}
为了方便查看多项数据的images,labels和prediction,所以定义一个名为plot_images_labels_prediction的函数来实现目的
def plot_images_labels_prediction(images,labels,prediction,idx,num=10):#images为图像,labels为标签,prediction为预测,idx为要开始显示的图像的索引,num为要显示图像的数量,默认是10,最多25
fig=plt.gcf()
fig.set_size_inches(12,14) #设置画布大小为12x14英寸
if num>25: #设置最多可以显示25张图片
num=25
for i in range(0,num):
ax=plt.subplot(5,5,1+i)
ax.imshow(images[idx