55. TensorFlow 时尚物品分类#

55.1. 介绍#

本次挑战将由你独立完成一个开放性的分类预测练习,你需要使用 Fashion-MNIST 时尚物品数据集,并通过 TensorFlow Keras 来构建一个合理的 DNN 网络。

55.2. 知识点#

  • Keras 构建神经网络

  • 灰度数据标准化

  • Flatten, Dropout 层

https://cdn.huhuhang.com/hands-on-ai/images/document-uid214893labid7506timestamp1548825522838.png

Fashion-MNIST 时尚物品数据集包含 70,000 张图片,其中训练集为 60,000 张 28x28 像素灰度图像,测试集为 10,000 同规格图像,总共 10 类时尚物品标签。

类别

描述

中文

0

T-shirt/top

T 恤/上衣

1

Trouser

裤子

2

Pullover

套头衫

3

Dress

连衣裙

4

Coat

外套

5

Sandal

凉鞋

6

Shirt

衬衫

7

Sneaker

运动鞋

8

Bag

背包

9

Ankle boot

短靴

下面,我们使用 TensorFlow 直接加载该数据集。

import tensorflow as tf

(X_train, y_train), (X_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

# 对特征进行标准化处理
X_train = X_train / 255
X_test = X_test / 255

X_train.shape, X_test.shape, y_train.shape, y_test.shape
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
29515/29515 [==============================] - 0s 7us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26421880/26421880 [==============================] - 2s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
5148/5148 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4422102/4422102 [==============================] - 1s 0us/step
((60000, 28, 28), (10000, 28, 28), (60000,), (10000,))

读取数据之后,由于是灰度图像,可以直接除以 255 进行标准化。除此之外,也可以使用 TensorFlow 提供的 tf.keras.utils.normalize 等方法对数据进行标准化。之后,我们可视化训练集第一个样本查看:

from matplotlib import pyplot as plt
%matplotlib inline

plt.imshow(X_train[0], cmap=plt.cm.gray)
plt.title(y_train[0])
Text(0.5, 1.0, '9')
../_images/c5318c83a8b5c5850e4070306fb7f6f39a59be7336c30826bd9a370e5a65a691.png

接下来,我们准备构建一个包含有 2 个隐含层的 DNN 网络完成图片分类。

Exercise 55.1

开放型挑战

挑战:使用 TensorFlow Keras 构建一个包含有 2 个隐含层的 DNN 全连接人工神经网络,完成时尚物品分类。

规定:你可以自由选择使用 Keras 顺序模型或者函数模型进行构建。可以自由定义神经网络结构,损失函数,优化方法等。

我们推荐使用如下网络,你也可以自定义修改。

image

上方的推荐网络使用到的层有:

  • tf.keras.layers.Flatten:用于将原输入 \(28 \times 28\) 的矩阵展平成行向量。🔗

  • tf.keras.layers.Dropout:全连接层直接以一定概率断开神经元连接,防止过拟合。🔗

你需要通过官方文档学习这两个层,并学会结合前面实验中的知识来完成网络的构建和训练。

最终,挑战期望得到合理迭代次数下的训练集准确率和测试集准确率结果,最好能接近 90% 或更高。示例如下:

期望输出

Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - loss: 0.3098 - acc: 0.8856 - val_loss: 0.3455 - val_acc: 0.8776
Epoch 2/5
60000/60000 [==============================] - loss: 0.2981 - acc: 0.8891 - val_loss: 0.3352 - val_acc: 0.8784
Epoch 3/5
60000/60000 [==============================] - loss: 0.2885 - acc: 0.8914 - val_loss: 0.3346 - val_acc: 0.8741
Epoch 4/5
60000/60000 [==============================] - loss: 0.2802 - acc: 0.8942 - val_loss: 0.3349 - val_acc: 0.8808
Epoch 5/5
60000/60000 [==============================] - loss: 0.2738 - acc: 0.8982 - val_loss: 0.3197 - val_acc: 0.8851

相关链接