tensorflow2.0入门系列(二)
导入相关包
1 | import tensorflow as tf |
Fashion MNIST数据集,包含10个类别中的70,000个灰度图像。 图像显示了(28 x 28)的单个服装物品.
60,000张图像来训练网络和10,000张图像来评估网络学习图像分类的准确程度
图像为28x28 NumPy数组,像素值范围为0到255.标签是一个整数数组,范围从0到9.这些对应于图像所代表的服装类别:
| Label | Class |
|---|---|
| 0 | T-shirt/top |
| 1 | Trouser |
| 2 | Pullover |
| 3 | Dress |
| 4 | Coat |
| 5 | Sandal |
| 6 | Shirt |
| 7 | Sneaker |
| 8 | Bag |
| 9 | Ankle boot |
导入时装MNIST数据集,作为MNIST手写时装数据集的扩展
1 | fashion_mnist = keras.datasets.fashion_mnist |
每个图像都映射到一个标签。 由于类名不包含在数据集中,因此将它们存储在此处以便在后面绘制图像时使用
1 | #新建列表用于存儲每個标签所对应的类型 |
数据扩展
(ps下方展示的代码仅可用于了解一些基本的数据操作扩展方法,并非核心代码)
1 | #获取数据集的Shape |
数据预处理
在训练网络之前必须对数据进行预处理。
一是方便我们的神经网络能够快速的识别里面的特征。
二是能够有效的帮助我们训练出一个成功的模型。
我们可以借助matplotlib这个绘图工具包帮助我们直观的感受数据集,以及训练过程。当然TensorFlow也提供了tensorboard用于可视化,暂时我们先不做讲解
我们可以先试着借助matplotlib画出我们数据集中的某张图片:
1 | plt.figure() |

在将它们送到神经网络模型之前,我们为了将这些值缩放到0到1的范围,我们将值除以255.训练集和测试集以相同的方式进行预处理
1 | train_images = train_images / 255.0 |
为了验证数据格式是否正确以及我们是否已准备好构建和训练网络,让我们显示训练集中的前25个图像并在每个图像下方显示类名
1 | #创建图 |
可以通过右边的彩色比例条可以明显看出图像值已经缩放到0-1的范围
构建模型
设置神经网络层
这里还是采用Keras提供的层叠模型
1 | model = keras.Sequential([ |
配置模型
1 | #采用Adam优化器,loss计算方法为sparse_categorical_crossentropy,评价函数 |
训练模型
1 | #训练总轮数为5轮 |
评估模型
看准确度
1 | test_loss, test_acc = model.evaluate(test_images, test_labels) |
进行预测
1 | predictions = model.predict(test_images) |
现在我们去其中第一个结果看看预测情况:
1 | print(predictions[0]) |
输出:[2.4625590e-08 6.4621108e-10 6.6212579e-08 1.8379983e-11 4.6871547e-09
4.0910607e-05 3.9370971e-07 9.7850722e-04 2.8181713e-09 9.9898010e-01]
预测是10个数字的数组。 它们代表模型的“信心”,即图像对应于10种不同服装中的每一种。 我们可以看到哪个标签具有最高的置信度值
我们可以使用np.argmax()来直接计算出置信度最高的所对应的标签
1 | print(np.argmax(predictions[0])) |
我们再对比一下真正的标签
1 | print(test_labels[0]) |
我们同样可以借助matplotlib直观的表现出来
首先我们可以构建画小图的函数和画预测值直方图的函数:
1 | def plot_image(i, predictions_array, true_label, img): |
我们可以看看15张图片的表现情况
1 | num_rows = 5 |
