2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【深度学习】训练CIFAR-10数据集实现分类加测试

【深度学习】训练CIFAR-10数据集实现分类加测试

时间:2019-05-13 15:35:48

相关推荐

【深度学习】训练CIFAR-10数据集实现分类加测试

网上有很多博主写的训练CIFAR-10的代码,本次只是单纯记录一下自己调试的一个程序,对于初学深度学习的小白可以参考,如有不对,请多多见谅!!!

一、CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像。

二、代码中利用的是TF1.14,CUDA10.0,win10系统。首先导入我们需要的库。

import keras

from keras.models import Sequential

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

from keras.datasets import cifar10

import matplotlib.pyplot as plt

然后加载训练集和测试集,并且将数值转换成一种热编码二进制数组,并且将图像的RGB值从0-255转换到0-1之间,并且创建空的顺序模型。

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

y_train_one_hot = keras.utils.to_categorical(y_train, 10)

y_test_one_hot = keras.utils.to_categorical(y_test, 10)

x_train = x_train.astype(‘float32’)

x_test = x_test.astype(‘float32’)

x_train = x_train/255

x_test = x_test/255

model = Sequential()

模型空间结构的话,源代码给出的是两次卷积和池化(最大池化)(32和64)

model.add(Conv2D(32, (3, 3), activation=‘relu’, padding=‘same’, input_shape=(32, 32, 3)))

model.add(Conv2D(32, (3, 3), activation=‘relu’, padding=‘same’))

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

model.add(Conv2D(64, (3, 3), activation=‘relu’, padding=‘same’))

model.add(Conv2D(64, (3, 3), activation=‘relu’, padding=‘same’))

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

model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(512, activation=‘relu’))

model.add(Dropout(0.5))

model.add(Dense(10, activation=‘softmax’))

model.summary()

设置的指标是准确率,采用的是交叉熵损失函数,利用了adam优化器。

pile(loss=‘categorical_crossentropy’,

optimizer=‘adam’,

metrics=[‘accuracy’])

hist = model.fit(x_train, y_train_one_hot,

batch_size=32, epochs=200,

validation_split=0.2)

其他设置的都是一些绘图的代码。

plt.plot(hist.history[‘loss’])

plt.plot(hist.history[‘val_loss’])

plt.title(‘Model loss’)

plt.ylabel(‘Loss’)

plt.xlabel(‘Epoch’)

plt.legend([‘val’, ‘train’], loc=‘upper right’)

plt.show()

plt.plot(hist.history[‘acc’])

plt.plot(hist.history[‘val_acc’])

plt.title(‘Model accuracy’)

plt.ylabel(‘Accuracy’)

plt.xlabel(‘Epoch’)

plt.legend([‘val’, ‘train’], loc=‘lower right’)

plt.show()

model.evaluate(x_test, y_test_one_hot)

model.save(‘D:\shenduxuexijichu\1\modelepoch200.h5’)

最后将模型保存。

三、将其形成一个train.py文件,进行运行,可以适当修改网络参数,多次训练,

四、训练之后,用自己训练的model,进行测试,测试采用Github其他博主的代码进行修改,运行之后结果为

import matplotlib.pyplot as plt

import numpy as np

from skimage.transform import resize

from keras.models import load_model

import os

model = load_model(‘D:\shenduxuexijichu\saveh5\modelepoch200.h5’)

print(“导入模型成功!”)

l = 1

a = os.listdir(“D:\shenduxuexijichu\data\”)

print(“读取数据…”)

for i in a:

if “jpg” in i:

my_image = plt.imread(‘D:\shenduxuexijichu\data\’ + i)

my_image_resized = resize(my_image, (32, 32, 3))

probabilities = model.predict(np.array([my_image_resized]))number_to_class = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']#Cifar10类别:飞机 汽车 鸟 猫 鹿 狗 青蛙 马 船 卡车index = np.argsort(probabilities[0, :])print("第{}张照片".format(l))print("最像的是:", number_to_class[index[9]], "概率为:", probabilities[0, index[9]])print("第二像的是:", number_to_class[index[8]], "概率为:", probabilities[0, index[8]])print("第三像的是:", number_to_class[index[7]], "概率为:", probabilities[0, index[7]])print("第四像的是:", number_to_class[index[6]], "概率为:", probabilities[0, index[6]])print("第五像的是:", number_to_class[index[5]], "概率为:", probabilities[0, index[5]])print("预测完成!")print("即将预测下一张照片...")print("--------------------")l = l + 1

print(“测试结束!”)

以上是训练加测试CIFAR-10数据集的某一种方法,如有不对,请多多指正!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。