Skip to content

TensorFlow 实例 - 图像分类项目

图像分类是计算机视觉中最基础也最重要的任务之一。本项目将使用 TensorFlow 框架构建一个能够识别不同类别图像的深度学习模型。

什么是图像分类

图像分类是指让计算机自动识别图像中主要物体所属类别的技术。例如:

  • 识别照片中是猫还是狗
  • 区分不同种类的花朵
  • 判断医学影像中的病变类型

技术选型

我们将使用以下技术栈:

  • TensorFlow:Google 开发的主流深度学习框架
  • Keras:TensorFlow 的高级API,简化模型构建
  • Matplotlib:用于可视化训练过程和结果

环境准备

安装必要库

bash
pip install tensorflow matplotlib numpy

验证安装

python
import tensorflow as tf
print(f"TensorFlow 版本: {tf.__version__}")

数据集准备

我们将使用经典的 CIFAR-10 数据集,它包含10个类别的6万张32x32彩色图像。

加载数据集

实例

python
from tensorflow.keras.datasets import cifar10

# 加载数据

(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()

# 类别名称

class_names = ['飞机', '汽车', '鸟', '猫', '鹿', 

               '狗', '青蛙', '马', '船', '卡车']

3.2 数据预处理

实例

python
# 归一化像素值到0-1范围

train_images = train_images / 255.0

test_images = test_images / 255.0

# 查看数据形状

print("训练集图像形状:", train_images.shape)

print("训练集标签形状:", train_labels.shape)

4. 构建模型

4.1 模型架构

我们将构建一个卷积神经网络(CNN),这是处理图像任务的经典结构。

实例

python
from tensorflow.keras import layers, models

model = models.Sequential([

    # 卷积层1

    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),

    layers.MaxPooling2D((2, 2)),

    

    # 卷积层2

    layers.Conv2D(64, (3, 3), activation='relu'),

    layers.MaxPooling2D((2, 2)),

    

    # 卷积层3

    layers.Conv2D(64, (3, 3), activation='relu'),

    

    # 全连接层

    layers.Flatten(),

    layers.Dense(64, activation='relu'),

    layers.Dense(10)  # 输出层,10个类别

])

模型结构可视化

Image-Classification.png


训练模型

编译模型

实例

python
model.compile(optimizer='adam',

              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),

              metrics=['accuracy'])

开始训练

实例

python
history = model.fit(train_images, train_labels, epochs=10, 

                    validation_data=(test_images, test_labels))

训练过程可视化

实例

python
import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'], label='训练准确率')

plt.plot(history.history['val_accuracy'], label='验证准确率')

plt.xlabel('Epoch')

plt.ylabel('Accuracy')

plt.ylim([0, 1])

plt.legend(loc='lower right')

plt.show()

模型评估与预测

评估测试集性能

实例

python
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)

print(f'\n测试准确率: {test_acc}')

进行预测

实例

python
import numpy as np

# 添加softmax层使输出为概率

probability_model = tf.keras.Sequential([model, layers.Softmax()])

# 对测试集前5张图进行预测

predictions = probability_model.predict(test_images[:5])

# 显示预测结果

for i in range(5):

    predicted_label = np.argmax(predictions[i])

    true_label = test_labels[i][0]

    print(f"预测: {class_names[predicted_label]} | 实际: {class_names[true_label]}")

项目扩展建议

提高模型性能的方法

  1. 增加网络深度(更多卷积层)
  2. 使用数据增强技术
  3. 尝试不同的优化器和学习率
  4. 添加批归一化层

实际应用方向

  • 医学影像分析
  • 自动驾驶中的物体识别
  • 工业质检系统
  • 安防监控系统

8. 常见问题解答

Q1: 为什么选择CNN而不是普通神经网络?

A: CNN通过局部连接和权值共享能更好地捕捉图像的空间特征,且参数更少。

Q2: 如何选择合适的epoch数量?

A: 观察验证集准确率,当不再提升时停止训练,避免过拟合。

Q3: 遇到内存不足错误怎么办?

A: 可以减小batch size,或使用更小的图像尺寸。

AI 思考中...

TensorFlow 模型调优技巧

TensorFlow 实例 – 文本分类项目

基于 VitePress 构建,部署于 GitHub Pages