文章目录

  • 前言
  • 一、Fashion-MNIST是什么?
  • 二、代码实现
    • 1.引入库
    • 2.读取数据集
    • 3.数据预处理
    • 4.搭建神经网络
    • 5.编译和训练神经网络模型
    • 6.神经网络预测
  • 总结

前言

每个想要学习深度学习、图像识别的同学,想要用到神经网络,入门的实例必定是MNIST手写数字集,这是所有人都绕不开的,我也是,我之前写了三篇关于MNIST的博文。en…但这个数据集毕竟只有手写数字,有时候并不是能够满足我们开发的要求,于是,Fashion-MNIST出现了。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Fashion-MNIST是什么?

这个数据集是我们国家的一个大佬制作的,还发表了论文:Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms,其中值得我们关注的是数据制作的方法:最原始图片是背景为浅灰色的,分辨率为7621000 的JPEG图片。然后经过resampled 到 5173 的彩色图片。然后依次经过以下7个步骤,最终得到28*28的灰度图。
2017年8月27日,Fashion-MNIST图片库在GitHub上开源,MNIST的时代宣告终结。
这不是巧合,而是Fashion-MNIST蓄谋已久。它克隆了MNIST的所有外在特征:
60000张训练图像和对应Label;
10000张测试图像和对应Label;
10个类别;
每张图像28x28的分辨率;
4个GZ文件名称都一样;
对于已有的MNIST训练程序,只要修改下代码中的数据集读取路径,或者残暴的用Fashion-MNIST数据集文件将MNIST覆盖,替换就瞬间完成了。
不同的是,Fashion-MNIST不再是抽象符号,而是更加具象化的人类必需品——服装,共10大类。
我认为对于衣服的识别,相比于手写数字的识别更加有意义。相比之下,Fashion-MNIST更难,有一位博主对于MNIST可以达到95%识别率的训练代码,去训练Fashion-MNIST,最后模型识别率猛降了10个百分点。对于一个人工智能算法,是否可用的一个根本性度量标准就是:不亚于人类。

二、代码实现

1.引入库

代码如下(示例):

from __future__ import absolute_import, division, print_function, unicode_literals# 载入TensorFlow 和 tf.keras
import tensorflow as tf
from tensorflow import keras# 载入 辅助包
import numpy as np
import matplotlib.pyplot as plt
# 输出当前的tf版本
# print(tf.__version__)

2.读取数据集

代码如下(示例):

#从网站下载数据=========================================
fashion_mnist = keras.datasets.fashion_mnist(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

(1)残暴的用Fashion-MNIST数据集文件将MNIST覆盖,替换就瞬间完成了。
(2)再将训练图像、训练标签和测试图像、测试标签读取出来就可以了。和之前的MNIST读取并没有分别。
(3)定义整理一个衣服类别数组,到最后预测的时候,可以根据索引值查找模型预测的是哪一类衣服。


3.数据预处理

代码如下(示例):

train_images = train_images / 255.0      #像素的值除以255。
test_images = test_images / 255.0

在训练网络之前,有必要对数据进行预处理。试着调查最初的图像就会明白,像素的值是从0到255之间的数值。


4.搭建神经网络

代码如下(示例):

model = keras.Sequential([    #选择序贯模型keras.layers.Flatten(input_shape=(28, 28)), #Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。#28*28变为1*784 Flatten不影响batch的大小。keras.layers.Dense(128, activation='relu'),#添加全连接层,输出空间维度(节点)为128,激活函数为relu,作用是分类keras.layers.Dense(10, activation='softmax')#添加全连接层,输出空间维度为10,激活函数为softmax
])

# 设定层:一个Flatten层、2个全连接层
构成神经网络的基本构成要素是层(layer)。从输入的数据抽出“特征”。那些“特征”是更“有意义”的东西。
#深度学习模型大部分都是由简单的层叠组成的。在大部分层,例如tf.keras.layers.Dense,有训练中学习的参数。


5.编译和训练神经网络模型

代码如下(示例):

model.compile(optimizer='adam',        #Adam优化器,adam有默认的学习率,所以不用写lr大小,作用:自适应动态调整学习率loss='sparse_categorical_crossentropy',#损失函数metrics=['accuracy']) #评价函数为正确率
model.fit(train_images, train_labels, epochs=5)#训练5个回合
test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2) #model.evaluate函数预测给定输入的输出,#verbose=2 为每个epoch输出一行记录print("test_loss:", test_loss,  "    测试准确率为:", test_acc)

(1)编译模型:使用Adam优化器sparse_categorical_crossentropy损失函数,accuracy评价函数 (2)训练模型: 在这个例子中,train_images和train_labels是两个序列。 #模型会学习图像和标签的对应关系。 让模型对测试数据集进行预测(分类)——在这个例子中是test_images序列。然后和test_labels序列对比预测结果。 开始训练之前,调用model.fit方法。让训练用数据“fit”(适合)模型。 (3使用model.evaluate函数将测试图像集和测试标签集模型里进行训练,最后输出损失率和识别率


6.神经网络预测

代码如下(示例):

predictions = model.predict(test_images)
predictions[0]
np.argmax(predictions[0])#返回一个numpy数组中最大值的索引值。当一组中同时出现几个最大值时,返回第一个最大值的索引值。

此时预测的是测试集图像的第一个值,通过np.argmax()函数将回一个numpy数组中最大值的索引值。这个值就是模型预测的衣服类别,这个数值也是我们之前整理的衣服类别数组中对应的那个索引值。


## 7.预测运行结果



能够看出,测试准确率为87.6%,最后模型预测数据集第一张衣服的种类索引值为9,即最后一个种类,通过查找数组,发现模型预测第一张图片是Ankle boot类别。

总结

这个神经网络模型的搭建使用了全连接神经网络,没有涉及到卷积神经网络的卷积和池化操作,这也是识别率偏低的直接原因,后期可以在神经网络模型中添加卷积层和池化层来提高识别率,降低损失率。另外在后期也实现了将以图表的形式呈现出来预测的结果,这样更加有利于使用者的观感。大大提高了舒适度。

神经网络衣服分类器详解(Fashion-MNIST数据集)相关推荐

  1. 一文读懂经典卷积网络模型——LeNet-5模型(附代码详解、MNIST数据集)

    欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯 LeNet-5模型是Yann LeCun教授与1998年在论文Gradient-based learning applied to d ...

  2. fashionmnist数据集_Keras实现Fashion MNIST数据集分类

    本篇用keras构建人工神经网路(ANN)和卷积神经网络(CNN)实现Fashion MNIST 数据集单个物品分类,并从模型预测的准确性方面对ANN和CNN进行简单比较. Fashion MNIST ...

  3. 卷积神经网络CNN原理详解(一)——基本原理

    卷积神经网络CNN原理详解(一)--基本原理 转载过来为了自己以后学习方便,大家请看原文章 为什么要用神经网络? 特征提取的高效性. 大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做, ...

  4. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  5. python cnn程序_python cnn训练(针对Fashion MNIST数据集)

    本文将和大家一起一步步尝试对Fashion MNIST数据集进行调参,看看每一步对模型精度的影响.(调参过程中,基础模型架构大致保持不变) 废话不多说,先上任务: 模型的主体框架如下(此为拿到的原始代 ...

  6. haar分类器详解(Haar特征,积分图,adaboost算法,筛选式级联分类器),DCG介绍 --文献阅读报告《基于素描对视频的人脸识别研究》

    基于素描对视频的人脸识别--haar分类器详解,haar特征,adaboost,级联强分类器,积分图,DCG 背景 算法总体流程 1.预处理--识别出人脸并将人脸图像标准化 haar特征 积分图--加 ...

  7. R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入、生存对象生成、ggsurvplot可视化参数配置、设置、可视化对比

    R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入.生存对象生成.ggsurvplot可视化参数配置.设置.可视化对比 目录 R语言使用survminer包生 ...

  8. Fashion MNIST数据集的处理——“...-idx3-ubyte”文件解析

    Fashion MNIST MNIST数据集可能是计算机视觉所接触的第一个图片数据集.而 Fashion MNIST 是在遵循 MNIST 的格式和大小的基础上,提升了一定的难度,在比较算法的性能时可 ...

  9. 卷积神经网络CNNs详解参考----MNIST

    mnist实例--卷积神经网络(CNN) 使用TensorFlow编写识别数字的CNN训练程序详解 深度学习之卷积神经网络CNN及tensorflow代码实现示例 CNN笔记:通俗理解卷积神经网络

最新文章

  1. c调用c++ qt_C++中是如何调用C接口的?
  2. 视频直播技术详解(5)延迟优化
  3. 32位 shell.efi x86_Linux 的 32 位内核自 Meltdown 以来一直有问题
  4. 用的最多的正则表达式
  5. mysql innodb row_format_INNODB物理行结构(ROW_FORMAT=COMPACT) | 学步园
  6. 深度学习与 Spark 和 TensorFlow
  7. oracle 体系架构图
  8. unity商店里下载的资源保存路径
  9. Alfa与申威【江南所】
  10. 【历史上的今天】7 月 10 日:iOS App Store 问世;台积电创始人出生;苹果手机越狱的起源
  11. SafeArea的使用
  12. 达索系统推出汽车项目智能看板行业解决方案体验
  13. Exp2 后门原理与实践 20164302 王一帆
  14. 各大国外网站后台管理模块
  15. pytorch 梯度计算相关内容总结
  16. 洛谷P3387 【模板】缩点 (tarjan算法)
  17. [转贴]国内计算机类学术期刊投稿指南
  18. mysql软件分为几种_常见的数据库软件有哪几种
  19. python中yield,send及next的使用
  20. 联想天逸笔记本关闭Fn功能,直接使用F1~12键

热门文章

  1. 点餐小程序原型模板-书亦烧仙草
  2. 【一个故事讲完https】聊聊https的诞生
  3. Kafka consumer多线程下not safe for multi-threaded access问题
  4. 牛客 数据库SQL实战 将所有获取奖金的员工当前的薪水增加10%
  5. 客户端解析html5,基于HTML5的WebGIS实时客户端设计
  6. Helm安装Harbor
  7. opengl生成图片php,(转)使用OpenGL显示图像(七)Android OpenGLES2.0——纹理贴图之显示图片...
  8. Endnote无法正确识别引文
  9. Zeppelin打开定时调度
  10. 【机器学习】Rasa NLU以及Rasa Core概念和语法简介(超详细必看)