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

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

| 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'))

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

    # flatten层常用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。
    model.add(Flatten())

    # 全连接层 对特征进行提取
    model.add(Dense(units=64, activation='relu'))

    # 输出层
    model.add(Dense(10))
    return model



网络结构

包含输入层的话总共9层。其中有三个卷积层,俩个最大池化层,一个flatten层,俩个全连接层。
在这里插入图片描述

参数量

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

3664)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个任务需要用到深度学习中的卷积神经网络(Convolutional Neural Network, CNN)来完成分类任务。具体的步骤如下: 1. 数据预处理 首先,我们需要将Fashion-MNIST数据集下载并解压缩。然后将数据集分为训练集和测试集,并对数据进行标准化处理,即将像素值缩放到0到1之间。这个步骤可以通过以下代码实现: ```python import tensorflow as tf from tensorflow import keras # 加载数据集 (train_images, train_labels), (test_images, test_labels) = keras.datasets.fashion_mnist.load_data() # 对图像进行标准化处理 train_images = train_images / 255.0 test_images = test_images / 255.0 ``` 2. 定义算法模型 接下来,我们需要定义卷积神经网络模型。在这里,我们将使用一个包含两个卷积层和两个全连接层的简单CNN模型。代码如下: ```python model = keras.Sequential([ keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu, input_shape=(28,28,1)), keras.layers.MaxPooling2D((2,2), strides=2), keras.layers.Conv2D(64, (3,3), padding='same', activation=tf.nn.relu), keras.layers.MaxPooling2D((2,2), strides=2), keras.layers.Flatten(), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(10, activation=tf.nn.softmax) ]) ``` 3. 训练和评估模型 现在我们已经定义好了模型,接下来需要进行编译和训练。这里我们选择使用Adam优化器和交叉熵损失函数。代码如下: ```python model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images.reshape(-1,28,28,1), train_labels, epochs=5) test_loss, test_acc = model.evaluate(test_images.reshape(-1,28,28,1), test_labels) print('Test accuracy:', test_acc) ``` 4. 超参数调优 最后,我们可以进行超参数调优来提高模型的性能。这个过程可以通过使用Keras Tuner等工具来自动化完成,也可以手动调整超参数并进行实验来找到最佳的超参数组合。常见的超参数包括学习率、批次大小、卷积核大小和数量、全连接层神经元数量等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值