基本分类:对服装图像进行分类

训练了一个神经网络模型来对衣服的图像进行分类,例如运动鞋和衬衫。
本指南使用tf.keras(高级API)在TensorFlow中构建和训练模型。

#引入TensorFlow 和 tf.keras
import tensorflow as tf
from tensorflow import keras#引入numpy和matplotlib
import numpy as np
import matplotlib.pyplot as plt
#查看tensorflow的版本
print(tf.__version__)

导入Fashion MNIST数据集

使用Fashion MNIST数据集,其中包含10个类别的70,000张灰度图像。图像显示了低分辨率(28 x 28像素)的单个衣​​物。

Fashion MNIST旨在替代经典MNIST数据集,通常被用作计算机视觉机器学习程序的“ Hello,World”。MNIST数据集包含手写数字(0、1、2等)的图像,格式与您将在此处使用的衣服的格式相同。

本指南将Fashion MNIST用于多种用途,因为它比常规MNIST更具挑战性。这两个数据集都相对较小,用于验证算法是否按预期工作。它们是测试和调试代码的良好起点。

在这里,使用60,000张图像来训练网络,使用10,000张图像来评估网络学习对图像进行分类的准确度。您可以直接从TensorFlow访问Fashion MNIST。直接从TensorFlow导入和加载Fashion MNIST数据:

fashion_mnist = keras.datasets.fashion_mnist(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

加载数据集将返回四个NumPy数组:

  • 在train_images和train_labels阵列的训练集 -The数据模型用来学习。
  • 针对测试集,和test_images,对模型进行了测试test_labels。

图像是28x28 NumPy数组,像素值范围是0到255。标签是整数数组,范围是0到9。这些对应于图像表示的衣服类别:

标签
0 T恤/上衣 T-shirt/top
1 裤子 Trouser
2 套衫 Pullover
3 连衣裙 Dress
4 涂层 Coat
5 凉鞋 Sandal
6 衬衫 Shirt
7 运动鞋 Sneaker
8 袋子 Bag
9 脚踝靴 Ankle boot

每个图像都映射到一个标签。由于类名不包含在数据集中,因此将它们存储在此处以供以后在绘制图像时使用:

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

预处理数据

在训练网络之前,必须对数据进行预处理。图片像素值落在0到255之间,将这些值缩放到0到1的范围,然后再将其输入神经网络模型。为此,将值除以255。以相同的方式预处理训练集和测试集非常重要:

train_images = train_images / 255.0test_images = test_images / 255.0

建立模型

建立神经网络需要配置模型的各层,然后编译模型。

设置图层

神经网络的基本组成部分是层。图层从输入到其中的数据中提取表示。希望这些表示对于当前的问题有意义。

深度学习的大部分内容是将简单的层链接在一起。大多数层(例如tf.keras.layers.Dense)具有在训练期间学习的参数。

model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10)
])

该网络的第一层tf.keras.layers.Flatten将图像格式从二维数组(28 x 28像素)转换为一维数组(28 * 28 = 784像素)。可以将这一层看作是堆叠图像中的像素行并将它们排成一行。该层没有学习参数。它只会重新格式化数据。

像素展平后,网络由tf.keras.layers.Dense两层序列组成。这些是紧密连接或完全连接的神经层。第一Dense层有128个节点(或神经元)。第二层(也是最后一层)返回长度为10的logits数组。每个节点包含一个得分,该得分指示当前图像属于10类之一。

编译模型

在准备训练模型之前,需要进行一些其他设置。这些是在模型的编译步骤中添加的:

  • 优化器 -这是基于模型看到的数据及其损失函数来更新模型的方式。
  • 损失函数 -衡量训练过程中模型的准确性。您希望最小化此功能,以在正确的方向上“引导”模型。
  • 指标 -用于监视培训和测试步骤。以下示例使用precision,即正确分类的图像比例。
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

训练模型

训练神经网络模型需要执行以下步骤:

  1. 将训练数据输入模型。在此示例中,训练数据在train_images和train_labels数组中。
  2. 该模型学习关联图像和标签。
  3. 您要求模型对测试集进行预测(在此示例中为test_images数组)。
  4. 验证预测是否与test_labels阵列中的标签匹配。

喂模型

要开始训练,请调用该model.fit方法,之所以这样称呼是因为该方法使模型“适合”训练数据:

model.fit(train_images, train_labels, epochs=10)
Epoch 1/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.4999 - accuracy: 0.8245
Epoch 2/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3789 - accuracy: 0.8637
Epoch 3/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3394 - accuracy: 0.8757
Epoch 4/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3141 - accuracy: 0.8838
Epoch 5/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2953 - accuracy: 0.8909
Epoch 6/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2800 - accuracy: 0.8964
Epoch 7/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2660 - accuracy: 0.9014
Epoch 8/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2582 - accuracy: 0.9038
Epoch 9/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2461 - accuracy: 0.9084
Epoch 10/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2393 - accuracy: 0.9109
<tensorflow.python.keras.callbacks.History at 0x7f9e70d4a860>

模型训练时,会显示损失和准确性指标。该模型在训练数据上达到约0.91(或91%)的精度。

评估准确性

接下来,比较模型在测试数据集上的表现:

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)print('\n测试精度:', test_acc)
313/313 - 0s - loss: 0.3653 - accuracy: 0.8720测试精度: 0.871999979019165

事实证明,测试数据集的准确性略低于训练数据集的准确性。训练准确性和测试准确性之间的差距代表过度拟合。当机器学习模型在新的,以前看不见的输入上的表现比训练数据上的表现差时,就会发生过度拟合。过度拟合的模型“存储”训练数据集中的噪声和细节,从而对新数据的模型性能产生负面影响。

Tensorflow之基本图像分析相关推荐

  1. 开源用于医学影像的深度学习工具箱

    主要整理相关将深度学习技术应用到医学数据领域的开源软件,囊括了医学影像的病灶分割.检测等技术.如果大家有更好的推荐,欢迎留言. 医学影像系列 NiftyNet: https://github.com/ ...

  2. 始于TensorFlow ,终于PyTorch

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | Scott Carey 译者 | Sambodhi 策划 ...

  3. 【深度学习】上海交大发布 MedMNIST 医学图像分析数据集 新基准

    By 超神经 内容概要:医学图像分析是一个非常复杂的跨学科领域,近日上海交通大学发布了 MedMNIST 数据集,有望促进医学图像分析的发展. 关键词:医学图像分析   公开数据集  令人头秃的医学图 ...

  4. 基于TensorFlow的开源JS库的网页前端人物动作捕捉的实现

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 前言 随着前端生态的发展,Java已经不仅仅局限于作为网页开发,也越来越活跃于服务器端,移动端小程序等应用开发中.甚至通过Elect ...

  5. TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5

    原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[Apach ...

  6. 视频图像分析处理流程(完整版)

    来源:投稿 作者:LSC 编辑:学姐 一.视频分析处理的完整流程 (1)视频编解码的入门知识 尽管压缩工具五花八门,但是他们的目的都只有一个:都是为了减小文件的占用空间. 除去我们常见的.zip,.7 ...

  7. 那些TensorFlow上好玩的和黑科技

    那些TensorFlow上好玩的和黑科技 Google于2017年2月16日(北京时间)凌晨2点在美国加利福尼亚州山景城举办了首届TensorFlow开发者峰会.Google现场宣布全球领先的深度学习 ...

  8. 【转载】史上最全:TensorFlow 好玩的技术、应用和你不知道的黑科技

    [导读]TensorFlow 在 2015 年年底一出现就受到了极大的关注,经过一年多的发展,已经成为了在机器学习.深度学习项目中最受欢迎的框架之一.自发布以来,TensorFlow 不断在完善并增加 ...

  9. MNIST手写数字识别 —— 图像分析法实现二分类

    手写数字任务识别简介 MNIST 数据集来自美国国家标准与技术研究所(National Institute of Standards and Technology,简称 NIST ),总共有7万张图, ...

最新文章

  1. 拓扑排序的非计算机应用
  2. 169. Majority Element
  3. 键盘消息捕获--MFC
  4. 如何学习Java? 在学习Java的过程中需要掌握哪些技能?
  5. C语言之10/16进制字符串和数字转换(四)
  6. sqlite 检索的字段结果前加空格_MySQL5.7分词全文检索思路
  7. java classpath的配置_java的classpath怎么配置
  8. StringUtil.isNotEmpty(转)
  9. Java简易小说阅读器
  10. 曼孚科技:7种常用的数据标注工具
  11. 分享psd格式怎么预览的方法和psd文件缩略图插件
  12. HNUST-C语言课程设计 完成质量测试记录·
  13. 【分享】新品TI AM5708开发板!DSP+ARM异构多核!相比OMAP-L138,性能升级;相比AM5728,成本优化、功耗更低!
  14. 盘点最近 火火火 的 7 个 GitHub 项目
  15. 计算机网络分层汇聚层,大型局域网通常划分为核心层、汇聚层和接入层,以下关于各个网络层次的描述中,不 - 问答库...
  16. [原创]续一:WMI进程占用CPU过高,由Alibaba的pcUnitTest.exe文件引起
  17. ACM大一练习赛-第三场------G - EPR悖论克鲁斯卡尔算法
  18. 苏州源特VPT87DDF01B 隔离变压器 小体积/SMD/3000VDC 隔离
  19. R语言高维数据的pca、 t-SNE算法降维与可视化分析案例报告
  20. Stable Fluids / Real-Time Fluid Dynamics for Games 笔记

热门文章

  1. 某线上培训课程到期后,可以继续观看的bug
  2. 说到“以用户为中心”这件事,Aruba很专业!
  3. mysql any all some
  4. c# winform 调用 SetWindowPos
  5. riki小车应用记录(1)
  6. python基础知识1---python相关介绍
  7. SSM+vue基础项目从零开始练习前端1
  8. Gradle获取当前编译的Flavor
  9. 从区块链到DAG(四)--DAG共识之PHANTOM协议
  10. [杂谈]关于GCC128位大整数的使用