在深度学习领域,卷积神经网络(CNN)是一种专门处理图像和视频数据的神经网络类型。CNN能够实现的功能包括图像分类、图像识别、目标检测、面部识别等。本文将通过一个简单的图像分类任务,详细讲解如何使用CNN进行图像分类。
将使用 TensorFlow 库中的 CIFAR10 数据集进行图像分类。该数据集包含多种物体的图像,如船只、青蛙、飞机、狗、汽车等,共有60,000张彩色图像,分为10个类别。接下来,将进入编码部分。
首先,来查看数据集的形状。训练数据包含50,000张图像,测试数据包含10,000张图像,每张图像的大小为32x32像素,包含RGB三个颜色通道。还检查了标签的唯一性,并展示了训练数据和测试数据中的第一张图像。
在数据预处理阶段,需要执行两个步骤:一是将图像的像素值缩放到0到1之间;二是将标签从二维重塑为一维。通过这种方式,为模型准备好了数据。
构建深度学习模型通常包括五个步骤:定义模型、编译模型、拟合模型、评估模型和进行预测。首先定义模型,添加了第一个卷积层,使用了32个3x3大小的过滤器,激活函数为ReLU,并为模型提供了输入形状。接着添加了2x2大小的最大池化层,有助于降低维度。然后,又添加了一个64个3x3大小过滤器的卷积层和一个2x2大小的最大池化层。接下来,将层展平,以便传递到密集层,并添加了一个具有216个神经元的密集层。最后,添加了一个输出层,使用了softmax激活函数,因为有10个标签。
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
在这一步,使用rmsprop优化器,损失函数为稀疏分类交叉熵,评估指标为准确率。
model.fit(X_train, y_train, epochs=10)
通过训练,得到了89%的准确率和0.31的损失。接下来,将查看测试数据的准确率。
model.evaluate(X_test, y_test)
测试数据的准确率为69%,远低于训练数据,这意味着模型过拟合了。
pred = model.predict(X_test)