【深度学习】基于tensorflow的服装图像分类训练(数据集:Fashion-MNIST)_服装数据集(2)

本文介绍了如何使用Fashion-MNIST数据集训练CNN模型,包括数据下载、预处理(最值归一化和图像维度升级)、以及选择CPU或GPU进行训练的策略。重点讲解了如何在TensorFlow中构建简单CNN模型并演示了数据可视化。
摘要由CSDN通过智能技术生成
	- [参数量](#_162)

前言

关于环境这里不再赘述,与【深度学习】从LeNet-5识别手写数字入门深度学习一文的环境一致。

了解Fashion-MNIST数据集

Fashion-MNIST数据集与MNIST手写数字数据集不一样。但他们都有共同点就是都是灰度图片。
Fashion-MNIST数据集是各类的服装图片总共10类。下面列出了中英文对应表,方便接下来的学习。

中文英文
t-shirtT恤
trouser牛仔裤
pullover套衫
dress裙子
coat外套
sandal凉鞋
shirt衬衫
sneaker运动鞋
bag
ankle boot短靴

下载数据集

使用tensorflow下载(推荐)

默认下载在C:\Users\用户\.keras\datasets路径下。

from tensorflow.keras import datasets

# 下载数据集
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

数据集分类

这里对从网上下载的数据集进行一个说明。

文件名数据说明
train-images-idx3-ubyte训练数据图片集
train-labels-idx1-ubyte训练数据标签集
t10k-images-idx3-ubyte测试数据图片集
t10k-labels-idx1-ubyte测试数据标签集

数据集格式

训练数据集共60k张图片,各个服装类型的数据量一致也就是说每种6k。
测试数据集共10k张图片,各个服装类型的数据量一致也就是说每种100。

数据集均采用28281的灰度照片。

采用CPU训练还是GPU训练

一般来说有好的显卡(GPU)就使用GPU训练因为,那么对应的你就要下载tensorflow-gpu包。如果你的显卡较差或者没有足够资金入手一款好的显卡就可以使用CUP训练。

区别

(1)CPU主要用于串行运算;而GPU则是大规模并行运算。由于深度学习中样本量巨大,参数量也很大,所以GPU的作用就是加速网络运算。

(2)CPU计算神经网络也是可以的,算出来的神经网络放到实际应用中效果也很好,只不过速度会很慢罢了。而目前GPU运算主要集中在矩阵乘法和卷积上,其他的逻辑运算速度并没有CPU快。

使用CPU训练

# 使用cpu训练
import os

os.environ["CUDA\_VISIBLE\_DEVICES"] = "-1"

使用CPU训练时不会显示CPU型号。
在这里插入图片描述

使用GPU训练

gpus = tf.config.list_physical_devices("GPU")

if gpus:
    gpu0 = gpus[0]  # 如果有多个GPU,仅使用第0个GPU
    tf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用
    tf.config.set_visible_devices([gpu0], "GPU")

使用GPU训练时会显示对应的GPU型号。
在这里插入图片描述

预处理

最值归一化(normalization)

关于归一化相关的介绍在前文中有相关介绍。 最值归一化与均值方差归一化

# 将像素的值标准化至0到1的区间内。
    train_images, test_images = train_images / 255.0, test_images / 255.0
    return train_images, test_images

升级图片维度

因为数据集是灰度照片,所以我们需要将[28,28]的数据格式转换为[28,28,1]

# 调整数据到我们需要的格式
    train_images = train_images.reshape((60000, 28, 28, 1))
    test_images = test_images.reshape((10000, 28, 28, 1))

在这里插入图片描述

显示部分图片

首先需要建立一个标签数组,然后绘制前20张,每行5个共四行
注意:如果你执行下面这段代码报这个错误:TypeError: Invalid shape (28, 28, 1) for image data。那么你就使用我下面注释掉的那句话。

from matplotlib import pyplot as plt

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
                   'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

plt.figure(figsize=(20, 10))
for i in range(20):
    plt.subplot(4, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    #plt.imshow(train\_images[i].squeeze(), cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()


绘制结果:
在这里插入图片描述

建立CNN模型

from tensorflow_core.python.keras import Input, Sequential
from tensorflow_core.python.keras.layers import Conv2D, Activation, MaxPooling2D, Flatten, Dense


def simple\_CNN(input_shape=(32, 32, 3), num_classes=10):
    # 构建一个空的网络模型,它是一个线性堆叠模型,各神经网络层会被顺序添加,专业名称为序贯模型或线性堆叠模型
    model = Sequential()

    # 卷积层1 
    model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))

    # 最大池化层1
    model.add(MaxPooling2D((2, 2), strides=(2, 2), padding='same'))

    # 卷积层2
    model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu'))

    # 最大池化层2
    model.add(MaxPooling2D((2, 2), strides=(2, 2), padding='same'))



![img](https://img-blog.csdnimg.cn/img_convert/ea2019e26798ba8cfab29e1cc8e47b28.png)
![img](https://img-blog.csdnimg.cn/img_convert/b93e239538793856f3abcd6aba6f5b42.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

### 回答1: 您可以使用 Python 和 TensorFlow 或 PyTorch 来构建服装分类深度学习模型。 您可以从以下代码作为参考: ``` import tensorflow as tf model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 3)), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 这是一个基本的卷积神经网络(Convolutional Neural Network,CNN)的示例,用于对图像进行分类。您可以按照自己的需求调整模型的结构。此代码仅作为示例,需要根据实际任务进行调整。 ### 回答2: 深度学习是一种机器学习的方法,它通过神经网络模型对数据进行训练和预测,逐渐提高模型的准确性。因此,要实现服装分类深度学习代码,我们需要以下步骤: 1. 数据收集和预处理:首先,收集足够量的服装图像数据集,包括不同种类的服装照片。然后,对图像进行预处理,包括图像缩放、裁剪和归一化等操作,以便输入神经网络。 2. 构建神经网络模型:选择适当的深度学习模型架构,例如卷积神经网络(CNN),以便对服装图像进行分类。在模型中包括卷积层、池化层和全连接层等,用于提取图像的特征和进行分类。 3. 模型训练:使用已经准备好的数据集,将数据集分成训练集和验证集。然后,使用训练集对神经网络模型进行训练,并使用验证集评估模型的准确性。通过反复训练和调整模型的参数,逐渐提高模型的性能。 4. 模型预测:在模型训练完成后,使用测试集对模型进行预测,并计算预测结果的准确性。通过预测不同服装图像的类别,实现对服装分类。 需要注意的是,实现服装分类深度学习代码需要具备一定的编程知识和技能,例如Python编程和深度学习框架(如TensorFlow、PyTorch等)的使用。同时,还需要一定的计算资源,如GPU加速,以加快模型的训练和预测速度。 最后,深度学习是一个迭代的过程,因此在实现服装分类深度学习代码时,需要不断尝试和调整模型的参数和架构,以提高模型的准确性和性能。 ### 回答3: 对于需要服装分类深度学习代码,你可以考虑以下的步骤和思路。 首先,你需要收集一个包含不同类别服装数据集。可以使用公开的数据集,例如Fashion-MNIST等,或者自己创建一个数据集。确保你的数据集中包含足够数量的样本图片,并且每个样本都有正确的标签。 接下来,你可以使用深度学习框架,如TensorFlow或PyTorch来构建模型。你可以选择使用已经预训练好的模型,如ResNet、VGG等,也可以自己设计网络结构。注意,对于服装分类任务,卷积神经网络(CNN)是一个常用的选择,因为它可以捕捉图像中的局部特征。 然后,你需要将数据集分为训练集和测试集。通常,你需要将大部分数据用于训练,少部分用于测试模型的性能。确保在划分数据集时,各个类别的样本数量相对均衡。 接下来,你可以使用训练集对模型进行训练。在训练过程中,你可以使用一些优化算法(如随机梯度下降)来更新模型的权重,以最小化损失函数。同时,你可以设置一些超参数,如学习率、批次大小等,来调整模型的性能。 在训练完成后,你可以使用测试集评估模型的性能。可以计算分类准确率、精确率、召回率等指标来评估模型的性能。 最后,根据模型的性能,你可以对其进行调整和改进。这可能包括调整网络结构、使用更复杂的模型、增加训练数据量等。 总的来说,服装分类深度学习代码涵盖了数据集准备、模型构建、训练和评估等步骤。希望以上的回答对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值