Tensorflow之基本图像分析
基本分类:对服装图像进行分类
训练了一个神经网络模型来对衣服的图像进行分类,例如运动鞋和衬衫。
本指南使用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'])
训练模型
训练神经网络模型需要执行以下步骤:
- 将训练数据输入模型。在此示例中,训练数据在train_images和train_labels数组中。
- 该模型学习关联图像和标签。
- 您要求模型对测试集进行预测(在此示例中为test_images数组)。
- 验证预测是否与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之基本图像分析相关推荐
- 开源用于医学影像的深度学习工具箱
主要整理相关将深度学习技术应用到医学数据领域的开源软件,囊括了医学影像的病灶分割.检测等技术.如果大家有更好的推荐,欢迎留言. 医学影像系列 NiftyNet: https://github.com/ ...
- 始于TensorFlow ,终于PyTorch
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | Scott Carey 译者 | Sambodhi 策划 ...
- 【深度学习】上海交大发布 MedMNIST 医学图像分析数据集 新基准
By 超神经 内容概要:医学图像分析是一个非常复杂的跨学科领域,近日上海交通大学发布了 MedMNIST 数据集,有望促进医学图像分析的发展. 关键词:医学图像分析 公开数据集 令人头秃的医学图 ...
- 基于TensorFlow的开源JS库的网页前端人物动作捕捉的实现
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 前言 随着前端生态的发展,Java已经不仅仅局限于作为网页开发,也越来越活跃于服务器端,移动端小程序等应用开发中.甚至通过Elect ...
- TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[Apach ...
- 视频图像分析处理流程(完整版)
来源:投稿 作者:LSC 编辑:学姐 一.视频分析处理的完整流程 (1)视频编解码的入门知识 尽管压缩工具五花八门,但是他们的目的都只有一个:都是为了减小文件的占用空间. 除去我们常见的.zip,.7 ...
- 那些TensorFlow上好玩的和黑科技
那些TensorFlow上好玩的和黑科技 Google于2017年2月16日(北京时间)凌晨2点在美国加利福尼亚州山景城举办了首届TensorFlow开发者峰会.Google现场宣布全球领先的深度学习 ...
- 【转载】史上最全:TensorFlow 好玩的技术、应用和你不知道的黑科技
[导读]TensorFlow 在 2015 年年底一出现就受到了极大的关注,经过一年多的发展,已经成为了在机器学习.深度学习项目中最受欢迎的框架之一.自发布以来,TensorFlow 不断在完善并增加 ...
- MNIST手写数字识别 —— 图像分析法实现二分类
手写数字任务识别简介 MNIST 数据集来自美国国家标准与技术研究所(National Institute of Standards and Technology,简称 NIST ),总共有7万张图, ...
最新文章
- 拓扑排序的非计算机应用
- 169. Majority Element
- 键盘消息捕获--MFC
- 如何学习Java? 在学习Java的过程中需要掌握哪些技能?
- C语言之10/16进制字符串和数字转换(四)
- sqlite 检索的字段结果前加空格_MySQL5.7分词全文检索思路
- java classpath的配置_java的classpath怎么配置
- StringUtil.isNotEmpty(转)
- Java简易小说阅读器
- 曼孚科技:7种常用的数据标注工具
- 分享psd格式怎么预览的方法和psd文件缩略图插件
- HNUST-C语言课程设计 完成质量测试记录·
- 【分享】新品TI AM5708开发板!DSP+ARM异构多核!相比OMAP-L138,性能升级;相比AM5728,成本优化、功耗更低!
- 盘点最近 火火火 的 7 个 GitHub 项目
- 计算机网络分层汇聚层,大型局域网通常划分为核心层、汇聚层和接入层,以下关于各个网络层次的描述中,不 - 问答库...
- [原创]续一:WMI进程占用CPU过高,由Alibaba的pcUnitTest.exe文件引起
- ACM大一练习赛-第三场------G - EPR悖论克鲁斯卡尔算法
- 苏州源特VPT87DDF01B 隔离变压器 小体积/SMD/3000VDC 隔离
- R语言高维数据的pca、 t-SNE算法降维与可视化分析案例报告
- Stable Fluids / Real-Time Fluid Dynamics for Games 笔记