基于Pytorch的CNN网络识别Fashion-MNIST服饰

1. 导入库并加载数据

import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras import layers, models
import numpy as np

# 加载 Fashion-MNIST 数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

# 数据预处理:将图像数据标准化到 0 和 1 之间
x_train, x_test = x_train / 255.0, x_test / 255.0
  • 导入所需的库:TensorFlow、Matplotlib 和 Numpy。
  • 加载 Fashion-MNIST 数据集,并对数据进行标准化处理,使图像数据在 [0, 1] 之间。

2. 定义标签到服饰名称的映射,并展示训练图片

# 定义标签数字到服饰名称的映射
class_names = [
    "T-shirt/top", "Trouser", "Pullover", "Dress", "Coat", 
    "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"
]

# 创建一个 3x3 的网格来展示 9 张训练图片
plt.figure(figsize=(6, 6))
for i in range(9):  # 循环展示前9张图片
    plt.subplot(3, 3, i+1)  # 创建 3x3 的子图
    plt.imshow(x_train[i], cmap=plt.cm.binary)  # 显示图片
    plt.title(f" {class_names[y_train[i]]}")  # 显示服饰名称
    plt.axis('off')  # 关闭坐标轴
plt.tight_layout()  # 调整布局
plt.show()
  • 定义数字标签到服饰名称的映射。
  • 使用 Matplotlib 创建 3x3 的网格,展示训练集中前 9 张图像,并显示每张图像对应的服饰类别名称。

在这里插入图片描述

3. 构建并输出模型概况

# 构建卷积神经网络模型
model = models.Sequential([
    layers.Reshape((28, 28, 1), input_shape=(28, 28)),  # 将每个 28x28 的图像转为 (28, 28, 1)
    layers.Conv2D(32, (3, 3), activation='relu'),  # 第一层卷积层
    layers.MaxPooling2D((2, 2)),  # 最大池化层
    layers.Conv2D(64, (3, 3), activation='relu'),  # 第二层卷积层
    layers.MaxPooling2D((2, 2)),  # 最大池化层
    layers.Conv2D(64, (3, 3), activation='relu'),  # 第三层卷积层
    layers.Flatten(),  # 展平层
    layers.Dense(64, activation='relu'),  # 全连接层
    layers.Dense(10, activation='softmax')  # 输出层,10个类别(对应10个服装类别)
])

# 输出模型概况
model.summary()
  • 使用 Keras 构建卷积神经网络(CNN),包括三个卷积层、两个池化层、展平层和两个全连接层,最后的输出层包含 10 个神经元(对应 10 种服饰类别)。
  • 输出模型的结构概况,展示每一层的形状、参数数量等信息。

在这里插入图片描述

4. 编译模型

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
  • 编译模型,使用 adam 优化器和 sparse_categorical_crossentropy 损失函数,监控准确率。

5. 训练模型

# 训练模型并保存训练过程的历史记录
history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))
  • 训练模型,设置训练轮数为 5,并使用测试集进行验证。

在这里插入图片描述

6. 评估模型并展示预测结果

# 评估模型在测试集上的性能
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")

在这里插入图片描述

# 创建一个 3x3 的网格来展示 9 张测试图片
plt.figure(figsize=(6, 6))
for i in range(9):  # 循环展示前9张测试图片
    # 获取每个测试样本并扩展维度以符合模型输入
    test_img = np.expand_dims(x_test[i], axis=0)    
    # 对图像进行预测
    prediction = model.predict(test_img)    
    # 获取预测类别
    predicted_label = np.argmax(prediction)  
    # 在子图中显示图像
    plt.subplot(3, 3, i+1)  # 创建 3x3 的子图
    plt.imshow(x_test[i], cmap=plt.cm.binary)  # 显示图片   
    # 显示预测标签和实际标签(将数字标签转换为服饰名称)
    plt.title(f" {class_names[predicted_label]}")   
    plt.axis('off')  # 关闭坐标轴
# 调整布局并展示
plt.tight_layout()
plt.show()
  • 评估模型在测试集上的性能,并输出测试准确率。
  • 创建 3x3 网格展示测试集的前 9 张图像,并显示每张图像的预测服饰类别。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值