章节索引 :

在 TensorBoard 之中记录图片数据

在之前的学习之中,我们了解了如何在 TensorBoard 之中查看 Loss 、准确率等指标的变化,也学习了如何在 TensorBoard 之中查看网络模型图。这些数据都是一些文本数据,那么我们能查看一些多媒体数据?答案是可以的,那么我们这节课就来学习一下如何在 TenosrBoard 之中查看图片数据。

1. 查看单张图片

我们在训练的过程之中可能要查看一下数据的基本样式,那么我们便可以使用 TensorBoard 来进行图片的查看工作,这边我们仍然以 Mnist 数据集为例。

首先我们需要导入数据:

import numpy as np
import tensorflow as tf

(x_train, y_train),(x_test, y_test) = tf.keras.datasets.mnist.load_data()

比如,我们要查看第一张训练集的图片:

file_writer = tf.summary.create_file_writer("logs/images/1")


img = np.reshape(x_train[0], (1, 28, 28, 1))

with file_writer.as_default():
  tf.summary.image("First train data", img, step=0)

首先,我们将日志目录定义在了 logs/images/1 文件夹下,然后我们通过以下 API 来实现图片数据的输出:

tf.summary.image("First train data", img, step=0)

其中第一个参数为名称,也就是图片的标签,第二个参数为图片本身,第三个图片为当前的步数,如果只查看静态图片,那么设置为 step=0 就看足够了。

然后我们启动 TensorBoard ,便可以在浏览器的 Image 选项卡之中查看到具体的图片了:

图片描述

通过左边的调节器,我们可以调节明暗度和对比度。

2. 查看多张图片

前面我们学习了如何查看单张图片,那么如果我们想要查看很多张图片要如何进行呢?

其实与单张图片的查看几乎完全一样,唯一不同的是,我们想要留意图片的数量以及 Batch 的大小

with file_writer.as_default():
  images = np.reshape(x_train[:16], (-1, 28, 28, 1))
  tf.summary.image("First 16 train images", images, max_outputs=16, step=0)

在这里,我们选择查看训练集的前 16 张图片,因此,我们要将其重新 Reshape 为如下的形状:

(图片数量, 图片长, 图片宽, 通道数量)

因此这里便是:

(16, 28, 28, 1)

如果不想计算 Batch 数量,可以直接使用 -1 代替:

(-1, 28, 28, 1)

于是,在 TensorBoard 之中,我们便可以在 “First 16 train images” 选项卡下面查看到我们的 16 张图片了:

图片描述

3. 自定义生成图片

在前面的学习之中,我们能输入的图片都是内置的图片或者数据集的图片。那么我们在这一小节便来学习一下如何将自己绘制的图片输入到 TensorBoard 之中。

这里涉及到一定的绘图知识,因此我们不会绘制过于复杂的图片,我们会绘制一张简单的图片,然后将其输出到 TensorBoard 之中。

首先我们要绘制出一张我们自定义的图片:


import matplotlib.pyplot as plt
import io

figure = plt.figure()

# 绘图
x = [1, 2, 3, 4]
y = [1.2, 2.5, 4.5, 7.5]
plt.plot(x, y)

在这张图片之中,我们简单地绘制了一条线段。然后我们便可以将其保存为 PNG 格式

# 定义缓存区
buf = io.BytesIO()
# 保存为png图片
plt.savefig(buf, format='png')

# 关闭画布
plt.close(figure)
buf.seek(0)

然后我们将保存好的png图片转化为TensorFlow的图片格式

# 转化为TensorFlow的图片格式
image = tf.image.decode_png(buf.getvalue(), channels=4)
# 增添一维数据,表示Batch
image = tf.expand_dims(image, 0)

最后我们便可以将图片输出到 TensorBoard 日志

with file_writer.as_default():
  tf.summary.image("Own Image", image, step=0)

然后我们便可以看到我们的图片的形式:

图片描述

4. 小结

在这节课的学习之中,我们学习了如何查看单张图片、如何查看多张图片,最后我们了解了如何将自定义的图片输出到T ensorBoard 之中。相信以上的 TensorBoard 使用技巧能够帮助到大家。

TensorFlow 简介、安装与快速入门
TensorFlow 简介 TensorFlow 安装 - CPU TensorFlow 安装 - GPU TensorFlow 快速入门示例
TensorFlow 模型的简洁表示-Keras
Keras 简介 使用 tf.keras 进行图片分类 使用 Keras 进行文本分类 使用 Keras 进行回归 在 Keras 中保存与加载模型 在 Keras 中进行模型的评估 Keras 中的Masking 与 Padding
TensorFlow 中的数据格式
TensorFlow 中的数据核心 使用 TensorFlow 加载 CSV 数据 使用 TensorFlow 加载 Numpy 数据 使用 TF 加载 DateFrame 数据 使用图像数据来训练模型 在 TensorFlow 之中使用文本数据 TF 之中的 Unicode 数据格式的处理
TensorFlow模型的高级表示-Estimat
使用预设的 Estimator 模型 将Keras模型转化为Estimator模型 Estimator实现BoostingTree模型
TensorFlow 高级技巧
过拟合问题 TensorFlow 中的回调函数 文本数据嵌入 在 TensorFlow 之中使用卷积神经网络 在 TensorFlow 之中使用循环神经网络 在 TensorFlow 之中使用注意力模型 在 TensorFlow 之中进行迁移学习 在 TensorFlow 之中进行数据增强 在 TensorFlow 之中进行图像分割 如何进行多 GPU 的分布式训练? 使用 tf.function 提升效率 使用 TF HUB 进行模型复用
TensorFlow高级技巧-自定义
使用 TensorFlow 进行微分操作 在 TensorFlow 之中自定义网络层与模型 在 TensorFlow 之中自定义训练
TF 框架中的可视化工具-TensorBoard
TensorBoard 的简介与快速上手 使用 TensorBoard 记录训练中的各项指标 在 TensorBoard 之中查看模型结构图 在 TensorBoard 之中记录图片数据