Path: blob/master/site/zh-cn/tensorboard/image_summaries.ipynb
25115 views
Copyright 2019 The TensorFlow Authors.
在 TensorBoard 中显示图像数据
设置
下载 Fashion-MNIST 数据集
您将构造一个简单的神经网络,用于对 Fashion-MNIST 数据集中的图像进行分类。此数据集包含 70,000 个 28x28 灰度时装产品图像,来自 10 个类别,每个类别 7,000 个图像。
首先,下载数据:
可视化单个图像
为了解 Image Summary API 的工作原理,现在您将在 TensorBoard 中记录训练集中的第一个训练图像。
在此之前,请检查训练数据的形状:
请注意,数据集中每个图像的形状均为 2 秩张量,形状为 (28, 28),分别表示高度和宽度。
但是,tf.summary.image()
需要一个包含 (batch_size, height, width, channels)
的 4 秩张量。因此,需要重塑张量。
您仅记录一个图像,因此 batch_size
为 1。图像为灰度图,因此将 channels
设置为 1。
现在,您可以在 TensorBoard 中记录此图像并进行查看了。
现在,使用 TensorBoard 检查图像。等待几秒,直至界面出现。
“Time Series”信息中心显示您刚刚记录的图像。这是一只“短靴”。
图像会缩放到默认大小,以方便查看。如果要查看未缩放的原始图像,请选中右侧“Settings”面板底部的“Show actual image size”。
调整亮度和对比度滑块,查看它们如何影响图像像素。
可视化多个图像
记录一个张量非常简单,但是要记录多个训练样本应如何操作?
只需在向 tf.summary.image()
传递数据时指定要记录的图像数即可。
记录任意图像数据
如果要可视化的图像并非张量(例如 matplotlib 生成的图像),应如何操作?
您需要一些样板代码来将图转换为张量,随后便可继续处理。
在以下代码中,您将使用 matplotlib 的 subplot()
函数以美观的网格结构记录前 25 个图像。随后,您将在 TensorBoard 中查看该网格:
构建图像分类器
现在,让我们将其运用于实例当中。毕竟,我们是在研究机器学习,而不是绘制漂亮的图片!
您将使用图像摘要来了解模型性能,同时为 Fashion-MNIST 数据集训练一个简单的分类器。
首先,创建一个非常简单的模型并通过设置优化器和损失函数对该模型进行编译。在编译步骤中,还需指定您要定期记录其准确率的分类器。
训练分类器时,查看混淆矩阵非常实用。混淆矩阵可帮助您详细了解分类器在测试数据上的性能。
定义一个计算混淆矩阵的函数。您将使用便捷的 Scikit-learn 函数进行定义,然后使用 matplotlib 绘制混淆矩阵。
现在,您可以训练分类器并定期记录混淆矩阵了。
您将执行以下操作:
创建 Keras TensorBoard 回调以记录基本指标
创建 Keras LambdaCallback 以在每个周期结束时记录混淆矩阵
使用 Model.fit() 训练模型,确保传递两个回调
随着训练的进行,向下滚动以查看 TensorBoard 启动情况。
请注意,模型在训练集和验证集上的准确率都在提高。这是一个好迹象。但是,该模型在数据特定子集上的性能如何呢?
向下滚动“Time Series”信息中心以呈现记录的混淆矩阵。选中“Settings”面板底部的“Show actual image size”以查看全尺寸的混淆矩阵。
默认情况下,信息中心会显示上次记录的步骤或周期的图像摘要。可以使用滑块查看更早的混淆矩阵。请注意矩阵随训练进行而发生的显著变化:深色的正方形会沿对角线聚集,而矩阵的其余部分则趋于 0 和白色。这意味着您的分类器的性能会随着训练的进行而不断提高!做得好!
混淆矩阵表明此简单模型存在一些问题。尽管已取得重大进展,但在衬衫、T 恤和套头衫之间却出现混淆。该模型需要进一步完善。
如果您有兴趣,请尝试使用卷积神经网络 (CNN) 改进此模型。