TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例

锋哥原创的TensorFlow2 Python深度学习视频教程:

https://www.bilibili.com/video/BV1X5xVz6E4w/

课程介绍

本课程主要讲解基于TensorFlow2的Python深度学习知识,包括深度学习概述,TensorFlow2框架入门知识,以及卷积神经网络(CNN),循环神经网络(RNN),生成对抗网络(GAN),模型保存与加载等。

TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例

Fashion MNIST数据集介绍

Fashion MNIST 是一个由 Zalando 公司发布的图像分类数据集,通常用于机器学习和计算机视觉任务,特别是图像分类的研究。它可以作为 MNIST 数据集(手写数字图像分类)的替代,因为它包含了更多的实际应用场景,并且数据类型更加复杂。Fashion MNIST 被广泛应用于算法验证和基准测试。

数据集特点

  • 图像尺寸:每张图像是 28x28 像素的灰度图。

  • 类别:该数据集包含 10 类不同的服饰产品。具体类别包括:

    1. T恤/上衣(T-shirt/top)

    2. 裙子(Trouser)

    3. 套头衫(Pullover)

    4. 连衣裙(Dress)

    5. 外套(Coat)

    6. 凉鞋(Sandal)

    7. 衬衫(Shirt)

    8. 运动鞋(Sneaker)

    9. 包(Bag)

    10. 踝靴(Ankle boot)

    这些图像是灰度图像,意味着每个像素的值在 0 到 255 之间,表示不同的灰度强度。

数据集构成

  • 训练集:包含 60,000 张图像,均匀分布在 10 个类别中。

  • 测试集:包含 10,000 张图像,用于评估模型的性能。

使用场景

Fashion MNIST 被用作初学者和研究者训练和测试图像分类模型的标准数据集。它的难度适中,适合用于以下应用:

  • 深度学习入门:用于神经网络(尤其是卷积神经网络)的训练。

  • 算法对比:不同机器学习算法的性能比较。

  • 特征提取与学习:用于测试特征工程和表示学习方法。

  • 图像分类基础:了解和练习分类任务。

卷积神经网络示例2-使用Fashion MNIST识别时装示例

复制代码
import tensorflow as tf
from keras import Input, layers
from matplotlib import pyplot as plt
​
# 1,加载Fashion MINIST数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
print(x_train[0], x_train[0].shape)
print(y_train, y_train.shape)
​
# 2,数据预处理
x_train = x_train / 255.0  # 归一化
x_test = x_test / 255.0  # 归一化
print(x_train[0], x_train[0].shape)
# 将数据重塑为 (样本数, 高, 宽, 通道数) 的形状
print(x_train, x_train.shape)
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
print(x_train, x_train.shape)
​
# 3,构建CNN模型
model = tf.keras.models.Sequential([
    Input(shape=(28, 28, 1)),
    layers.Conv2D(32, (3, 3), activation='relu'),  # 第一卷积层,卷积核大小3x3,滤波器数为32,ReLU激活函数
    layers.MaxPooling2D((2, 2)),  # 第一池化层,2x2最大池化
    layers.Conv2D(64, (3, 3), activation='relu'),  # 第二卷积层,卷积核大小3x3,滤波器数为64,ReLU激活函数
    layers.MaxPooling2D((2, 2)),  # 第二池化层,2x2最大池化
    layers.Conv2D(128, (3, 3), activation='relu'),  # 第三卷积层,卷积核大小3x3,滤波器数为64,ReLU激活函数
    layers.MaxPooling2D((2, 2)),  # 第三池化层,2x2最大池化
    layers.Flatten(),  # 展平层 将二维特征图展平为一维
    layers.Dense(512, activation='relu'),  # 全连接层,512个神经元,ReLU激活函数
    layers.Dense(10, activation='softmax')  # 输出层,10个神经元(对应数字0-9),softmax激活函数
])
​
# 4,模型编译
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy']
              )
​
# 5,模型训练
history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), verbose=1)
​
# 6,模型评估
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")

项目运行结果:

可视化训练过程:

复制代码
# 7,可视化训练过程
# 设置matplotlib使用黑体显示中文
plt.rcParams['font.family'] = 'Microsoft YaHei'
​
plt.plot(history.history['accuracy'], label='训练准确率')
plt.plot(history.history['val_accuracy'], label='验证准确率')
plt.xlabel('轮次')
plt.ylabel('准确率')
plt.legend()
plt.show()

预测结果:

复制代码
# 预测测试集中的一张图片
predictions = model.predict(x_test)
​
# 显示第一个预测结果
print(f"Predicted label: {predictions[0].argmax()}")
print(f"True label: {y_test[0]}")
​
# 显示第一张图片
plt.imshow(x_test[0].reshape(28, 28), cmap='gray')
plt.show()
相关推荐
User_芊芊君子2 分钟前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
聆风吟º12 分钟前
CANN算子开发:ops-nn神经网络算子库的技术解析与实战应用
人工智能·深度学习·神经网络·cann
觉醒大王13 分钟前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
笔画人生19 分钟前
# 探索 CANN 生态:深入解析 `ops-transformer` 项目
人工智能·深度学习·transformer
亓才孓21 分钟前
[Class类的应用]反射的理解
开发语言·python
灰灰勇闯IT24 分钟前
领域制胜——CANN 领域加速库(ascend-transformer-boost)的场景化优化
人工智能·深度学习·transformer
小白狮ww28 分钟前
要给 OCR 装个脑子吗?DeepSeek-OCR 2 让文档不再只是扫描
人工智能·深度学习·机器学习·ocr·cpu·gpu·deepseek
小镇敲码人30 分钟前
深入剖析华为CANN框架下的Ops-CV仓库:从入门到实战指南
c++·python·华为·cann
island131442 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
艾莉丝努力练剑43 分钟前
深度学习视觉任务:如何基于ops-cv定制图像预处理流程
人工智能·深度学习