首页 理论教育提高CIFAR-10图像识别准确度的方法

提高CIFAR-10图像识别准确度的方法

【摘要】:CIFAR-10是由Alex Krizhevsky、Vinod Nair与Geoffrey Hinton收集的一个用于图像识别的数据集,共有10种分类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车。所以CIFAR-10图像识别的难度比MNIST数据集高很多。CIFAR-10数据集中每个分类有6000个图像,共有60000个32×32的彩色图像,有50000个训练图像和10000个测试图像。from keras.utils import np_utilsfrom keras.datasets import cifarl0import matplotlib.pyplot as pltfrom keras.models import Sequentialfrom keras.layers import Dropout,Dense,Flatten,Conv2D,MaxPooling2Dimport pandas as pd②读取CIFAR-10数据。

CIFAR-10是由Alex Krizhevsky、Vinod Nair与Geoffrey Hinton收集的一个用于图像识别的数据集,共有10种分类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车。CIFAR-10数据集与之前的MNIST数据集相比,它的色彩、颜色噪声点比较多,同一类(如卡车)大小不一、角度不同、颜色不同。所以CIFAR-10图像识别的难度比MNIST数据集高很多。

CIFAR-10数据集中每个分类有6000个图像,共有60000个32×32的彩色图像,有50000个训练图像和10000个测试图像。

(1)数据预处理

①导入所需模块。

from keras.utils import np_utils

from keras.datasets import cifarl0

import matplotlib.pyplot as plt

from keras.models import Sequential

from keras.layers import Dropout,Dense,Flatten,Conv2D,MaxPooling2D

import pandas as pd

②读取CIFAR-10数据。

(x_train,y_train),(x_test,y_test)=cifarl0.load_data()

③将feature转换为思维矩阵;将feature以reshape转换为6000×28×28×1的四维矩阵。

x_train4D=x_train.reshape(x_train.shape[0],28,28,

1).astype('float32')

x_test4D=x_test.reshape(x_test.shape[0],28,28,

1).astype('float32')

④将feature标准化,标准化可以提高模型预测的准确度。

x_train4D_normalize=x_train4D/255

x_test4D_normalize=x_test4D/255

⑤label以one-hot endoding进行转换。

y_trainOneHot=np_utils.to_categorical(y_train)

y_testOneHot=np_utils.to_categorical(y_test)

(2)建立模型

①建立Sequential模型。

model=Sequential()

②建立卷积层1。

model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',input_shape=(28,28,1),activation='relu'))

③建立池化层1。

model.add(MaxPooling2D(pool_size=(2,2)))

④建立卷积层2。

model.add(Conv2D(filters=36,kernel_size=(5,5),padding='same',activation='relu'))

⑤建立池化层2。

model.add(MaxPooling2D(pool_size=(2,2)))

⑥建立平坦层。

model.add(Flatten())

⑦建立隐藏层。

model.add(Dense(units=128,activation='relu'))

⑧建立输出层。

model.add(Dense(units=10,activation='softmax'))

(3)进行训练

①定义训练方式。

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

②开始训练。

train_history=model.fit(x=x_train4D_normalize,y=y_trainOneHot,validation_split=0.2,epochs=3,batch_size=300,verbose=2)

(4)以测试数据评估模型准确率

scores=model.evaluate(x_test4D_normalize,y_testOneHot)

print('accuracy=',scores[1])

(5)进行预测

prediction=model.predict_classes(x_test4D_normalize)

预测结果会放在prediction中,可以与y_test进行比对,查看预测效果。