在 TensorBoard 之中記錄圖片數(shù)據(jù)
在之前的學(xué)習(xí)之中,我們了解了如何在 TensorBoard 之中查看 Loss 、準(zhǔn)確率等指標(biāo)的變化,也學(xué)習(xí)了如何在 TensorBoard 之中查看網(wǎng)絡(luò)模型圖。這些數(shù)據(jù)都是一些文本數(shù)據(jù),那么我們能查看一些多媒體數(shù)據(jù)?答案是可以的,那么我們這節(jié)課就來(lái)學(xué)習(xí)一下如何在 TenosrBoard 之中查看圖片數(shù)據(jù)。
1. 查看單張圖片
我們?cè)谟?xùn)練的過(guò)程之中可能要查看一下數(shù)據(jù)的基本樣式,那么我們便可以使用 TensorBoard 來(lái)進(jìn)行圖片的查看工作,這邊我們?nèi)匀灰?Mnist 數(shù)據(jù)集為例。
首先我們需要導(dǎo)入數(shù)據(jù):
import numpy as np
import tensorflow as tf
(x_train, y_train),(x_test, y_test) = tf.keras.datasets.mnist.load_data()
比如,我們要查看第一張訓(xùn)練集的圖片:
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 文件夾下,然后我們通過(guò)以下 API 來(lái)實(shí)現(xiàn)圖片數(shù)據(jù)的輸出:
tf.summary.image("First train data", img, step=0)
其中第一個(gè)參數(shù)為名稱,也就是圖片的標(biāo)簽,第二個(gè)參數(shù)為圖片本身,第三個(gè)圖片為當(dāng)前的步數(shù),如果只查看靜態(tài)圖片,那么設(shè)置為 step=0 就看足夠了。
然后我們啟動(dòng) TensorBoard ,便可以在瀏覽器的 Image 選項(xiàng)卡之中查看到具體的圖片了:
通過(guò)左邊的調(diào)節(jié)器,我們可以調(diào)節(jié)明暗度和對(duì)比度。
2. 查看多張圖片
前面我們學(xué)習(xí)了如何查看單張圖片,那么如果我們想要查看很多張圖片要如何進(jìn)行呢?
其實(shí)與單張圖片的查看幾乎完全一樣,唯一不同的是,我們想要留意圖片的數(shù)量以及 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)
在這里,我們選擇查看訓(xùn)練集的前 16 張圖片,因此,我們要將其重新 Reshape 為如下的形狀:
(圖片數(shù)量, 圖片長(zhǎng), 圖片寬, 通道數(shù)量)
因此這里便是:
(16, 28, 28, 1)
如果不想計(jì)算 Batch 數(shù)量,可以直接使用 -1 代替:
(-1, 28, 28, 1)
于是,在 TensorBoard 之中,我們便可以在 “First 16 train images” 選項(xiàng)卡下面查看到我們的 16 張圖片了:
3. 自定義生成圖片
在前面的學(xué)習(xí)之中,我們能輸入的圖片都是內(nèi)置的圖片或者數(shù)據(jù)集的圖片。那么我們?cè)谶@一小節(jié)便來(lái)學(xué)習(xí)一下如何將自己繪制的圖片輸入到 TensorBoard 之中。
這里涉及到一定的繪圖知識(shí),因此我們不會(huì)繪制過(guò)于復(fù)雜的圖片,我們會(huì)繪制一張簡(jiǎn)單的圖片,然后將其輸出到 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)
在這張圖片之中,我們簡(jiǎn)單地繪制了一條線段。然后我們便可以將其保存為 PNG 格式:
# 定義緩存區(qū)
buf = io.BytesIO()
# 保存為png圖片
plt.savefig(buf, format='png')
# 關(guān)閉畫(huà)布
plt.close(figure)
buf.seek(0)
然后我們將保存好的png圖片轉(zhuǎn)化為TensorFlow的圖片格式:
# 轉(zhuǎn)化為TensorFlow的圖片格式
image = tf.image.decode_png(buf.getvalue(), channels=4)
# 增添一維數(shù)據(jù),表示Batch
image = tf.expand_dims(image, 0)
最后我們便可以將圖片輸出到 TensorBoard 日志:
with file_writer.as_default():
tf.summary.image("Own Image", image, step=0)
然后我們便可以看到我們的圖片的形式:
4. 小結(jié)
在這節(jié)課的學(xué)習(xí)之中,我們學(xué)習(xí)了如何查看單張圖片、如何查看多張圖片,最后我們了解了如何將自定義的圖片輸出到T ensorBoard 之中。相信以上的 TensorBoard 使用技巧能夠幫助到大家。