卷积神经网络处理 cifa10 数据集

1. 首先是数据集的下载和使用

下载地址: http://www.cs.toronto.edu/~kriz/cifar.html
下载完成后无需解压
直接调用语句即可读取数据集

#具体语句如下
cifar10 = tf.keras.datasets.cifar10 #使用内置API keras下载数据集(速度缓慢)
(x_train, y_train), (x_test, y_test) = cifar10.load_data() # 直接读取数据即可

2.构建CNN模型

CIFA_10数据集是由 60000张RGB彩色图片构成

一共有10类分别为["airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck"]

其中50000张图片为训练集,10000张为测试集图片

在读取数据后我们可以输出测试集和训练集的数组大小
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)

运行结果为
在这里插入图片描述
在送入卷积神经网络前先进行处理,使图片中的每个像素值都处于0~1之间
并转化为tf张量

x_train, x_test = tf.cast(x_train, dtype=tf.float32)/255.0, tf.cast(x_test, dtype=tf.float32)/255.0
y_train, y_test = tf.cast(y_train, dtype=tf.int32), tf.cast(y_test, dtype=tf.int32)

构建训练模型

# 构建Sequential模型
#建立模型 model
model = Sequential([
    #特征提取层1
    layers.Conv2D(16, kernel_size=(3,3), padding="same", activation=tf.nn.relu,input_shape=x_train.shape[1:]),
    layers.Conv2D(16, kernel_size=(3,3), padding="same", activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=(2,2)),
    layers.Dropout(0.2),
    
    #特征提取层2
    layers.Conv2D(32, kernel_size=(3,3), padding="same", activation=tf.nn.relu),
    layers.Conv2D(32, kernel_size=(3,3), padding="same", activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=(2,2)),
    layers.Dropout(0.2),
    
    #全连接层
    layers.Flatten(),
    layers.Dropout(0.2),
    layers.Dense(128,activation='relu'),
    layers.Dropout(0.2),
    layers.Dense(10,activation="softmax"),
])

结构如图所示
在这里插入图片描述

4. 配置训练方法

使用 model.complie来配置训练的方法

# 配置方法
model.compile(optimizer='adam',
             loss='sparse_categorical_crossentropy',
             metrics=['sparse_categorical_accuracy'])

5.训练模型

history = model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.2)

结果如图所示:
在这里插入图片描述
可见准确率达到了 65%

6.评估模型

对测试集使用 evaluate函数进行模型的评估 可以得到该模型参数对测试集的图片准确率

model.evaluate(x_test, y_test, verbose=2)

在这里插入图片描述

准确率为 68%

7.测试

从测试集中随机抽取几张图片进行识别

plt.figure(figsize=(10,10))
for i in range(4):
    num = np.random.randint(1,10000)
    
    plt.subplot(1,4,i+1)
    plt.axis('off')
    plt.imshow(x_test[num],cmap='gray')
    demo = tf.reshape(x_test[num],(1,32,32,3))
    y_pred = name[np.argmax(model.predict(demo))]
    plt.title('Original: ' + name[(y_test.numpy())[num,0]] + '\nPredict: ' + y_pred)
plt.show()


可以看到此次的识别 对了两个错了两个

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

He_xj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值