19 深度学习应用案例:图像识别
系列进度
深度学习入门 · 第 19 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
图像识别的核心是让网络从像素中逐层提取边缘、纹理、形状和语义。真正上线时,光看准确率不够,还要看错例集中在哪些场景。
评估图像模型时,单独整理一批错例图。错例比平均指标更能告诉你下一步该补数据还是改模型。
在前一篇中,我们讨论了深度学习模型的评估与调优,重点讲解了如何避免过拟合。在这一篇中,我们将深入探讨深度学习在图像识别中的应用。图像识别是深度学习最为经典和广泛的应用之一,它已经在很多领域得到了成功的应用,如医疗影像分析、安全监控以及自动驾驶等。
图像识别的基础
图像识别的目标是从图像中识别和分类对象。在深度学习中,卷积神经网络(CNN)是最常用的模型之一。CNN能够自动从图像中提取特征,减少了手动特征提取的需求。
分析图像识别案例时,先看类别定义、图片质量、标注一致性、模型结构、混淆类别和部署场景。
CNN模型的基本结构
CNN模型通常由多个层组成,包括:
- 卷积层:用于提取图像特征。
- 池化层:用于下采样,减少特征图的维度。
- 全连接层:用于将特征映射到具体的类别。
以下是CNN模型的一个简单架构示例:
输入图像 -> 卷积层 -> 激活层 -> 池化层 -> 卷积层 -> 激活层 -> 池化层 -> 全连接层 -> 输出
图像识别案例:手写数字识别
为了更好地理解图像识别,我们将以手写数字识别为例进行演示。我们将使用著名的MNIST手写数字数据集,数据集中包含60000个训练图像和10000个测试图像,每个图像为28x28像素的单通道灰度图像。
看《深度学习应用案例:图像识别》时,先把图中的问题、关键词、操作和验收标准对上,再读正文会更省力。读完后,最好能用自己的项目重新讲一遍。
数据准备
首先,我们需要下载并准备数据。使用Keras库可以方便地加载MNIST数据集。
import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# 打印数据集形状
print("训练数据形状:", x_train.shape, y_train.shape)
print("测试数据形状:", x_test.shape, y_test.shape)
构建CNN模型
接下来,我们构建一个简单的CNN模型来进行手写数字识别。
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 构建CNN模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax')) # 10个分类
# 编译模型
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 打印模型概述
model.summary()
训练模型
现在,我们可以开始训练模型了。
# 训练CNN模型
model.fit(x_train.reshape(-1, 28, 28, 1), y_train, epochs=10, batch_size=128, validation_split=0.2)
模型评估
训练完成后,我们可以评估模型在测试集上的性能。
# 评估模型
test_loss, test_accuracy = model.evaluate(x_test.reshape(-1, 28, 28, 1), y_test)
print("测试损失:", test_loss)
print("测试准确率:", test_accuracy)
结果可视化
可以用需要的可视化技术来展示模型的预测效果。
# 随机选择一些测试图像进行预测
predictions = model.predict(x_test.reshape(-1, 28, 28, 1))
# 绘制结果
for i in range(8):
plt.subplot(2, 4, i + 1)
plt.imshow(x_test[i], cmap='gray')
plt.title(f'预测: {np.argmax(predictions[i])}, 真实: {y_test[i]}')
plt.axis('off')
plt.show()
在这个案例中,我们实现了一个基本的图像识别任务,使用CNN模型对手写数字进行分类。你可以看到,网络通过学习训练数据中的特征来准确预测测试数据的类别。
如果《深度学习应用案例:图像识别》还没完全消化,可以从这张卡片的四个动作重新走一遍。
回看《深度学习应用案例:图像识别》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。
小结
本篇内容介绍了图像识别的基本概念,并通过手写数字识别的案例展示了如何使用深度学习模型进行图像分类。在下篇中,我们将继续探讨深度学习在自然语言处理中的应用,打开新的应用领域。
希望本篇教程能帮助你理解深度学习在图像识别中的应用案例。以下代码示例和图像展示将为你提供进一步的学习和实践机会。请继续关注我们的系列教程,探索深度学习的更多可能性!
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
深度学习应用案例:图像识别适合谁读?
这是 深度学习入门 系列第 19 / 24 篇,适合正在学习深度学习入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇深度学习入门教程要多久?
按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读