活动地址:CSDN21天学习挑战赛


目录

1.跑通代码

2.代码分析

2.1

2.2

2.3

2.4

2.5

2.6

3.补充


文中一些基础概念的知识在我写的这个文章中可以查阅
(5条消息) tensorflow零基础入门学习_重邮研究森的博客-CSDN博客https://blog.csdn.net/m0_60524373/article/details/124143223

>- 本文为[365天深度学习训练营](https://mp.weixin.qq.com/s/k-vYaC8l7uxX51WoypLkTw) 中的学习记录博客
>- 参考文章地址: [深度学习100例-卷积神经网络(CNN)服装图像分类 | 第3天(

深度学习100例-卷积神经网络(CNN)服装图像分类 | 第3天_K同学啊的博客-CSDN博客


1.跑通代码

我这个人对于任何代码,我都会先去跑通之和才会去观看内容,哈哈哈,所以第一步我们先不管37=21,直接把博主的代码复制黏贴一份运行结果。(PS:做了一些修改,因为原文是jupyter,而我在pycharm)


import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
import numpy as np(train_images, train_labels), (test_images, test_labels) = datasets.fashion_mnist.load_data()# 将像素的值标准化至0到1的区间内。
train_images, test_images = train_images / 255.0, test_images / 255.0#调整数据到我们需要的格式
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))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(5,10,i+1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i], cmap=plt.cm.binary)plt.xlabel(class_names[train_labels[i]])
plt.show()model = models.Sequential([layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 卷积层1,卷积核3*3layers.MaxPooling2D((2, 2)),  # 池化层1,2*2采样layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3layers.MaxPooling2D((2, 2)),  # 池化层2,2*2采样layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层3,卷积核3*3layers.Flatten(),  # Flatten层,连接卷积层与全连接层layers.Dense(64, activation='relu'),  # 全连接层,特征进一步提取layers.Dense(10)  # 输出层,输出预期结果
])
model.summary()  # 打印网络结构model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10,validation_data=(test_images, test_labels))plt.imshow(test_images[1])
plt.show()
#
pre = model.predict(test_images) # 对所有测试图片进行预测
print( pre[1]) # 输出第一张图片的预测结果plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
plt.show()test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)print("测试准确率为:",test_acc)

点击pycharm即可运行出最后的预测结果!

2.代码分析

神经网络的整个过程我分为如下六部分,而我们也会对这六部分进行逐部分分析。那么这6部分分别是:

六步法:

1->import

2->train test(指定训练集的输入特征和标签)

3->class MyModel(model) model=Mymodel(搭建网络结构,逐层描述网络)

4->model.compile(选择哪种优化器,损失函数)

5->model.fit(执行训练过程,输入训练集和测试集的特征+标签,batch,迭代次数)

6->验证

2.1

导入:这里很容易理解,也就是导入本次实验内容所需要的各种库。在本案例中主要包括以下部分:

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

主要是tensorflow以及绘制的库。

对于这里的话我们可以直接复制黏贴,当需要一些其他函数时,只需要添加对应的库文件即可。

2.2

设置训练集和测试集:对于神经网络的训练包括了两种数据集合,一个是训练集,一个是测试集。其中训练集数据较多,测试集较少,因为训练一个模型数据越多相对的模型更准确。

本文中的数据集利用了网络的fashion_mnist数据集,该数据集是一个衣服的数据集合

下图为该数据集介绍

注意事项:由于本实验中的都是图像数据集,为了使网络训练结果更好,我们需要对图像数据进行标准化。像素点是255个,所以对于数据整除255即可。

train_images, test_images = train_images / 255.0, test_images / 255.0

在进行了标准化之和,我们的图像数据还是不能直接传入,对于网络模型的输入,我们需要让输入数据和网络模型的“入口”保持一致。因此我们还需要把数据进行尺寸修改,这里的修改大小倒是不明确要求。

train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

注意事项:这里的60000和10000是指数据集中的衣服个数,28是指尺寸,而1是指灰色图像的通道数。

2.3

网络模型搭建:这里也是神经网络的重点了!废话不多说,直接开始!

本文的神经网络的结构图如下:

在搭建模型的时候,我们将按照这个图片进行模型的搭建。

卷积层1:32通道,3x3尺寸,步长1的卷积核

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

 注意事项:这里是网络模型的第一层,因此要加上输入

池化层1:该池化层为2x2

layers.MaxPooling2D((2, 2))

卷积层2:64通道,3x3尺寸,步长1的卷积核

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

池化层2:该池化层为2x2

 layers.MaxPooling2D((2, 2))

卷积层3:64通道,3x3尺寸,步长1的卷积核

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

重点:

现在我们来分析一下图片中经过每层后数据的维度怎么来的

经过卷积层1之后,原数据28x28变为26x26是因为一个公式: (28-3)/stride+1=26

经过池化层1之后,原数据26x26变为13x13是因为池化池的卷积核为2,所以13=26/2

经过卷积层2之后,原数据13变为11:如上,32变为64是因为此时卷积核通道数为64

经过卷积层3之后,原数据(5-3)/stride+1=3

经过flatten层之后,数据数量=3*3*64=576

而后续全连接层的输出是根据全连接层代码设置。需要注意的是因为数据集是10种类型,因此最后为10

到此,我们便把网络模型设置的原因以及网络模型的输出结果进行了对应,我们可以看到网络模型的输出和我们分析的一致。

到此,网络模型我们变分析完了。

2.4

该部分也同样重要,主要完成模型训练过程中的优化器,损失函数,准确率的设置。

我们结合本文来看。

model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

其中:对于这三个内容的含义可以参考我的文章开头的另外一篇基础博文进行了详细的介绍

2.5

该部分就是执行训练了,那么执行训练肯定需要设置训练集数据及其标签,测试集数据及其标签,训练的epoch

history = model.fit(train_images, train_labels, epochs=10,validation_data=(test_images, test_labels))

2.6

当训练执行完毕,我们就可以拿一个测试集合中或者其他满足格式的数据进行验证了,这里为了方便,我就用测试集合进行验证。

pre = model.predict(test_images) # 对所有测试图片进行预测
print( pre[1]) # 输出第一张图片的预测结果

3.补充

本文中我们引入了一些其他概念。模型评估

通过训练和测试集合的准确率曲线来看看我们的模型的效果。

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
plt.show()test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)print("测试准确率为:",test_acc)

最后我们可以得到模型曲线以及测试集合的准确率

测试准确率为: 0.896399974822998

实现fashion_minst服装图像分类相关推荐

  1. 基于深度学习的服装图像分类与检索

    摘要      面对海量的服装图像数据,如果使用人工进行服装图像的语义属性标注以用于分类和检索,则需要花费大量的人力和时间,而且语义属性并不能完全表达服装图像中的丰富信息,造成检索效果不佳.     ...

  2. 【神经网络】(2) 网络优化,案例:服装图像分类,附python完整代码

    各位同学好,今天和大家分享以下TensorFlow2.0深度学习中对神经网络的优化方法,包括动量.学习率.dropout.交叉验证.正则化.本节使用数学公式对网络进行优化,增加网络的灵活性. 以下代码 ...

  3. 深度学习实战02-卷积神经网络(CNN)实现服装图像分类

    ​ ​ 活动地址:CSDN21天学习挑战赛 参考文章:https://mtyjkh.blog.csdn.net/article/details/116992196 一.前期准备 1. 设置GPU 如果 ...

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

    ​ 活动地址:CSDN21天学习挑战赛 目录 前言 了解Fashion-MNIST数据集 下载数据集 使用tensorflow下载(推荐) 数据集分类 数据集格式 采用CPU训练还是GPU训练 区别 ...

  5. 卷积神经网络(CNN)实现服装图像分类

    活动地址:CSDN21天学习挑战赛 在上一个案例中没有讲到什么是卷积神经网络,接下来介绍一下 什么是卷积? 卷积神经网络(CNN),一般用来处理图像数据和时间序列数据.其中"卷积" ...

  6. 二十万字!耗时90天

    大家好,我是 K同学啊! <深度学习100例>系列在昨天已经完成了第20博客! 这是一个漫长的过程,中途遇到了不少问题,但是也有幸遇见不少优秀的伙伴,这里简单介绍一下这90天做的事情. 1 ...

  7. 使用Python爬取CSDN历史博客文章列表,并生成目录

    使用Python爬取CSDN历史博客文章列表,并生成目录 这篇博客将介绍如何使用Python爬取CSDN历史博客文章列表,并生成目录. 2020年 2020年04月 cv2.threshold() 阈 ...

  8. 图像分类经典项目:基于开源数据集Fashion-MNIST的应用实践

    Datawhale 作者:何新,Datawhale优秀学习者 简介:何新,武汉理工大学硕士 https://github.com/whut2962575697 图像分类是计算机视觉和数字图像处理的一个 ...

  9. TensorFlow图像分类:如何构建分类器

    导言 图像分类对于我们来说是一件非常容易的事情,但是对于一台机器来说,在人工智能和深度学习广泛使用之前,这是一项艰巨的任务.自动驾驶汽车能够实时检测物体并采取相应必要的行动,并且由于TensorFlo ...

  10. 独家 | 手把手教你用Python构建你的第一个多标签图像分类模型(附案例)

    翻译:吴金笛 校对:郑滋 本文约4600字,建议阅读12分钟. 本文明确了多标签图像分类的概念,并讲解了如何构建多标签图像分类模型. 介绍 你正在处理图像数据吗?我们可以使用计算机视觉算法来做很多事情 ...

最新文章

  1. where 1=1 是什么鬼?
  2. JavaScript高级编程学习7——this关键字
  3. POJ - 2400 Supervisor, Supervisee(KM+打印方案)
  4. 【转】[技术回顾系列]--WebService事务处理
  5. 认识Linux下的硬盘分区
  6. [转]淘宝sdk——入门实战之header.php制作(二)
  7. DECLARE_DYNAMIC IMPLEMENT_DYNAMIC
  8. firefox 邮箱分类过滤
  9. androidtv gms包_Android 9,8.1和8.0的GMS包更新 201812
  10. linux操作系统中ssh的默认端口号,sshd服务的默认端口号
  11. 周伟焜挥别IBM 一个时代结束
  12. 计算机科学与技术哪个方向好就业前景,【计算机科学与技术】专业就业前景以及未来的就业方向...
  13. 基于微软 SAPI 的 TTS 程序实现
  14. 谷歌浏览器启动chrome 常用参数
  15. ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug
  16. 线性系统粗浅认识——第七次作业
  17. win10系统用激活码激活,用dos命令来激活,只能激活半年时间,暂时没找到永久的。
  18. 二分类神经网络结果准确率50%,loss一直在0.69的解决方法
  19. 常见的网站推广方法有哪些?
  20. 【模型库】六足球形机器人三维模型+urdf文件

热门文章

  1. 使用XenApp/XenDesktop发布App-V应用——安装App-V服务器
  2. 计算机中丢失pbvm80,修复pbvm80.dll
  3. NOIP2013普及组复赛 解题分析
  4. Fastjson jar包下载地址
  5. ALOS_PALSAR_12.5m分辨率DEM数据下载
  6. 1.什么是NoSql数据库?
  7. 中兴v5max android5.1,中兴V5Max
  8. 最简单的c 语言打开串口程序,一个简单的串口程序
  9. python少儿编程面试题-《与孩子一起学编程》python自测题
  10. java 做图片模糊处理