全部开发者教程

TensorFlow 入门教程

Python / 在 TensorBoard 之中记录图片数据

在 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 使用技巧能够帮助到大家。