ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 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等。 当然,这部分内容等后续再写,这里以学习和复写搭建模型为主。