您的位置:首页 > 其它

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

2020-01-13 13:50 253 查看

文章目录

  • 神经网络图像识别小结
  • 问题描述

    这里我们还是以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的基本架构和使用层次如下图所示:

    神经网络服装识别

    下面我们利用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,相信通过把模型建立的更合理更科学,效果会更好。我们后续再操作。
    • 点赞
    • 收藏
    • 分享
    • 文章举报
    HelloWorld! 发布了30 篇原创文章 · 获赞 8 · 访问量 2550 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: