# 1. 准备数据集
首先下载[Fashion MNIST](https://github.com/zalandoresearch/fashion-mnist)数据集。该数据集包含 10 个类别的 70,000 个灰度图像。这些图像以低分辨率(28x28 像素)展示了单件衣物,如下所示:
![](https://img.kancloud.cn/0d/ab/0dab3fc1434b4bc62ade16cf8de52fd7_840x840.png)
当然这里还是采用自带的方式加载数据集:
```
# 导入数据集
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
```
然后程序会自动下载对应的数据集:
![](https://img.kancloud.cn/2f/54/2f54a53653eaf67aa1c16c7cb5bf2bc2_955x130.png)
可以看下其维度:
![](https://img.kancloud.cn/f8/ad/f8ad5096936fbac478e7ededd58f50ae_378x166.png)
从图中可以知道这里和上个案例保持一致,还是每个图片为28x28。类似的这里我们需要对每个图片进行处理,当然可以先查看一下某个图片的内容:
```
# 导入工具
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(train_images[100])
plt.colorbar() # 右边的颜色值
plt.grid(False)
plt.show()
```
结果:
![](https://img.kancloud.cn/33/78/3378b6f737ba567688eaa8762c3b1e96_305x252.png)
因此,还是缩小至0到1之间:
```
train_images = train_images / 255.0
test_images = test_images / 255.0
```
然后再次调用前面的绘图代码,观察右边竖直的颜色值:
![](https://img.kancloud.cn/d7/1a/d71ac3aaa9655455b54d0659e92f2396_321x252.png)
很明显,这里达到了目标。
# 2. 定义模型
这里还是定义和上一个案例一样:
```
model = tf.keras.models.Sequential()
model.add( tf.keras.layers.Flatten(input_shape=(28, 28)))
model.add(tf.keras.layers.Dense(512, activation="relu"))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
```
也就是先拉平,然后装入全连接层,Dropout层,然后更具目标个数来进行定义最终输出层的维度10。
然后定义优化器/损失函数和评价指标:
```
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
```
训练模型:
```
model.fit(train_images, train_labels, epochs=10)
```
![](https://img.kancloud.cn/51/e1/51e1d119e7b145a19cc17932bf964712_1044x441.png)
# 3. 模型评估:
```
model.evaluate(test_images, test_labels, verbose=2)
```
![](https://img.kancloud.cn/ae/a4/aea4b54eef7369b6917434fdd2630a44_541x85.png)
结果表明,模型在测试数据集上的准确率略低于训练数据集。训练准确率和测试准确率之间的差距代表*过拟合*。过拟合是指机器学习模型在新的、以前未曾见过的输入上的表现不如在训练数据上的表现。**过拟合**的模型会“记住”训练数据集中的噪声和细节,从而对模型在新数据上的表现产生负面影响。
基本手段有:Early Stop、Dropout、L1L2等。
当然,这部分内容等后续再写,这里以学习和复写搭建模型为主。