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