TensorFlow实操之--服装图像识别问题-基于Keras

文章目录

  • 问题描述
  • 解决思路
  • Keras简介
  • 神经网络服装识别
    • 引入必要的包
    • 获取数据
    • 数据预处理
    • 构建网络模型
    • 配置网络模型
    • 评估模型
    • 预测
  • 神经网络图像识别小结

问题描述

这里我们还是以MNIST数据为例,与上一篇的不同在于上一篇是关于手写体数字识别,本篇是关于服装的简单识别。Fashion Mnist数据集由70,000张黑白图片构成,每张图片大小为 28x28,由十类服饰图片构成。另一个MNIST数据集是手写数字,Fashion MNIST 与之相比更有挑战性,适合用来验证算法

解决思路

一般滴,识别思路是

  1. 获取数据,包括训练数据和测试数据。
  2. 模型建立
  3. 训练
  4. 模型验证

这篇文档使用高级APItf.keras在TensorFlow中搭建和训练模型。 下面简单介绍一下Keras。

Keras简介

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。官方网址是https://keras.io/zh/。使用Keras主要下面几个步骤

  1. 准备好数据,并做好预处理。
  2. 构建模型。Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是 Sequential 顺序模型,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用 Keras 函数式 API,它允许构建任意的神经网络图。可以简单地使用 .add() 来堆叠模型。
  3. 在完成了模型的构建后, 可以使用 .compile() 来配置学习过程
  4. 训练,给模型喂数据
  5. 只需一行代码就能评估模型性能:loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
  6. 对新的数据生成预测:classes = model.predict(x_test, batch_size=128)
    Keras的基本架构和使用层次如下图所示:
    TensorFlow实操之--服装图像识别问题-基于Keras_第1张图片

神经网络服装识别

下面我们利用keras采用神经网络的方法对服装图像进行识别。

引入必要的包

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np

获取数据

#获取数据
fashion_mnist=keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
print(train_images.shape)
# print(train_images[1])
print(train_labels[1])

我们获取了数据,通过shape可以查看大小,并可以看看内部的数值。

数据预处理

在训练网络之前,必须对数据进行预处理。当前数据的像素值在0-255之间,统一不同数据间的量纲,有助于我们接下来对数据进行分析和计算,即对数据进行归一化处理。

#对数据进行归一化处理
train_images=train_images/255
test_images=test_images/255

构建网络模型

通过keras的Sequential创建模型,并添加神经网络的层次

#构建网络模型
model=keras.Sequential([keras.layers.Flatten(input_shape=(28,28)),
                       keras.layers.Dense(128,activation='relu'),
                       keras.layers.Dense(10,activation='softmax')
                        ])

配置网络模型

keras的配置网络也是一句话的事儿,可以看到设置了优化器,损失函数等。

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

评估模型

也是一句话

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)

预测

如有必要,我们对新的数据进行预测,这里举个例子,所有的测试数据进行预测。

predictions = model.predict(test_images)#对所有标签与图片进行预测

神经网络图像识别小结

训练模型在整个测试数据集的表现情况如下,测试准确率接近88%。

60000/60000 [==============================] - 2s 35us/step - loss: 0.2384 - acc: 0.9115
Test accuracy: 0.8796

从对keras的神经网络图像识别可以看到

  • Keras使用起来简直太简单了,太友好了。把深度学习的细节完全封装好,甚至把学习框架也封装了。可以说是非常容易上手。但是这种简单的,又让人害怕和担心,长期使用keras岂不是比掉包侠还调包虾,所以对深度学习的内部原理还是要细细研究的。
  • 上面的方法如手写数字识别的第一个方法一样,没用利用隐藏层,没有加入正则化,没有还用CNN,相信通过把模型建立的更合理更科学,效果会更好。我们后续再操作。

你可能感兴趣的:(深度学习TF)