Tensorboard詳解(下篇)

Tensorboard詳解(下篇)

1. Tensorflow監控指標可視化

除了GRAPHS欄目外,tensorboard還有IMAGES、AUDIO、SCALARS、HISTOGRAMS、DISTRIBUTIONS、FROJECTOR、TEXT、PR CURVES、PROFILE九個欄目,本小節將詳細介紹這些子欄目各自的特點和用法。

1.1 IMAGES

圖像儀表盤,可以顯示通過tf.summary.image()函數來保存的png圖片文件。

# 指定圖片的數據源為輸入數據x,展示的相對位置為[-1,28,28,1] 
image_shape=tf.reshape(x, [-1, 28, 28,1])
# 將input命名空間下的圖片放到summary中,一次展示10張
tf.summary.image('input', image_shape, 10)

如上面代碼,將輸入數據中的png圖片放到summary中,準備後面寫入日誌文件。運行程序,生成日誌文件,然後在tensorboard的IMAGES欄目下就會出現如下圖一所示的內容(實驗用的是mnist數據集)。儀表盤設置為每行對應不同的標籤,每列對應一個運行。圖像儀表盤僅支持png圖片格式,可以使用它將自定義生成的可視化圖像(例如matplotlib散點圖)嵌入到tensorboard中。該儀表盤始終顯示每個標籤的最新圖像。

Tensorboard詳解(下篇)

圖一 tensorboard中的IMAGES欄目內容展開界面


1.2 AUDIO

音頻儀表盤,可嵌入音頻的小部件,用於播放通過tf.summary.audio()函數保存的音頻。

一個音頻summary要存成 的二維字符張量。其中,k為summary中記錄的音頻被剪輯的次數,每排張量是一對[encoded_audio, label],其中,encoded_audio 是在summary中指定其編碼的二進制字符串,label是一個描述音頻片段的UTF-8編碼的字符串。

儀表盤設置為每行對應不同的標籤,每列對應一個運行。該儀表盤始終嵌入每個標籤的最新音頻。

1.3 SCALARS

Tensorboard 的標量儀表盤,統計tensorflow中的標量(如:學習率、模型的總損失)隨著迭代輪數的變化情況。如下圖二所示,SCALARS欄目顯示通過函數tf.summary.scalar()記錄的數據的變化趨勢。如下所示代碼可添加到程序中,用於記錄學習率的變化情況。

# 在learning_rate附近添加,用於記錄learning_rate 
tf.summary.scalar('learning_rate', learning_rate)

Scalars欄目能進行的交互操作有:

  • 點擊每個圖表左下角的藍色小圖標將展開圖表
  • 拖動圖表上的矩形區域將放大
  • 雙擊圖表將縮小
  • 鼠標懸停在圖表上會產生十字線,數據值記錄在左側的運行選擇器中。


Tensorboard詳解(下篇)

圖二 tensorboard中的SCALARS欄目內容展開界面


此外,讀者可通過在儀表盤左側的輸入框中,編寫正則表達式來創建新文件夾,從而組織標籤。

1.4 HISTOGRAMS

Tensorboard的張量儀表盤,統計tensorflow中的張量隨著迭代輪數的變化情況。它用於展示通過tf.summary.histogram記錄的數據的變化趨勢。如下代碼所示:

tf.summary.histogram(weights, 'weights') 

上述代碼將神經網絡中某一層的權重weight加入到日誌文件中,運行程序生成日誌後,啟動tensorboard就可以在HISTOGRAMS欄目下看到對應的展開圖像,如下圖三所示。每個圖表顯示數據的時間“切片”,其中每個切片是給定步驟處張量的直方圖。它依據的是最古老的時間步原理,當前最近的時間步在最前面。通過將直方圖模式從“偏移”更改為“疊加”,如果是透視圖就將其旋轉,以便每個直方圖切片都呈現為一條相互重疊的線。

Tensorboard詳解(下篇)

圖三 tensorboard中的HISTOGRAMS欄目內容展開界面


1.5 DISTRIBUTIONS

Tensorboard的張量儀表盤,相較於HISTOGRAMS,用另一種直方圖展示從tf.summary.histogram()函數記錄的數據的規律。它顯示了一些分發的高級統計信息。

如下圖四所示,圖表上的每條線表示數據分佈的百分位數,例如,底線顯示最小值隨時間的變化趨勢,中間的線顯示中值變化的方式。從上至下看時,各行具有以下含義:[最大值,93%,84%,69%,50%,31%,16%,7%,最小值]。這些百分位數也可以看作標準偏差的正態分佈:[最大值,μ+1.5σ,μ+σ,μ+0.5σ,μ,μ-0.5σ,μ-σ,μ-1.5σ,最小值],使得從內側讀到外側的著色區域分別具有寬度[σ,2σ,3σ]。

Tensorboard詳解(下篇)

圖四 tensorboard中的DISTRIBUTIONS欄目內容展開界面


1.6 PROJECTOR

嵌入式投影儀表盤,全稱Embedding Projector,是一個交互式的可視化工具,通過數據可視化來分析高維數據。例如,讀者可在模型運行過程中,將高維向量輸入,通過embedding projector投影到3D空間,即可查看該高維向量的形式,並執行相關的校驗操作。Embedding projector的建立主要分為以下幾個步驟:

1)建立embedding tensor

#1. 建立 embeddings 
embedding_var = tf.Variable(batch_xs, name="mnist_embedding")
summary_writer = tf.summary.FileWriter(LOG_DIR)

2)建立embedding projector 並配置

config = projector.ProjectorConfig() 
embedding = config.embeddings.add()
embedding.tensor_name = embedding_var.name
embedding.metadata_path = path_for_mnist_metadata #'metadata.tsv'
embedding.sprite.image_path = path_for_mnist_sprites #'mnistdigits.png'
embedding.sprite.single_image_dim.extend([28,28])
projector.visualize_embeddings(summary_writer, config)

3)將高維變量保存到日誌目錄下的checkpoint文件中

sess = tf.InteractiveSession() 
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver()

saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"), 1)

4)將metadata與embedding聯繫起來,將 vector 轉換為 images,反轉灰度,創建並保存 sprite image

to_visualise = batch_xs 
to_visualise = vector_to_matrix_mnist(to_visualise)
to_visualise = invert_grayscale(to_visualise)
sprite_image = create_sprite_image(to_visualise)
plt.imsave(path_for_mnist_sprites,sprite_image,cmap='gray')

5)運行程序,生成日誌文件,啟動服務,tensorboard中的PROJECTOR欄將展示投影后的數據的動態圖,如下圖五所示。

Tensorboard詳解(下篇)

圖五 tensorboard中的PROJECTOR欄目內容展開界面


Embedding Projector從模型運行過程中保存的checkpoint文件中讀取數據,默認使用主成分分析法(PCA)將高維數據投影到3D空間中,也可以設置選擇另外一種投影方法,T-SNE。除此之外,也可以使用其他元數據進行配置,如詞彙文件或sprite圖片。

1.7 TEXT

文本儀表盤,顯示通過tf.summary.text()函數保存的文本片段,包括超鏈接、列表和表格在內的Markdown功能均支持。

1.8 PR CURVES

PR CURVES儀表盤顯示的是隨時間變化的PR曲線,其中precision為橫座標,recall為縱座標。如下代碼創建了一個用於記錄PR曲線的summary。

# labels為輸入的y, predition為預測的y值 
# num_thresholds為多分類的類別數量
tensorboard.summary.pr_curve(name='foo',
predictions=predictions,
labels=labels,
num_thresholds=11)


Tensorboard詳解(下篇)

圖六 tensorboard中的PR CURVES欄目內容展開界面


(圖片來自tensorboard官方的github項目,鏈接為:

https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/pr_curve/images/pr_curves_intro.png)

上圖六為tensorboard上PR CURVES欄目在有內容時的首頁,沒有內容時就隱藏在INACTIVE欄目下。

訓練模型時,經常需要在查準率和查全率之間權衡,PR曲線能夠幫助我們找到這個權衡點。每條曲線都對應一個二分類問題,所以,針對多分類問題,每一個類都會生成一條對應的PR曲線。

1.9 PROFILE

Tensorboard的配置文件儀表盤,該儀表盤上包含了一套TPU工具,可以幫助我們瞭解,調試,優化tensorflow程序,使其在TPU上更好的運行。

但並不是所有人都可以使用該儀表盤,只有在Google Cloud TPU上有訪問權限的人才能使用配置文件儀表盤上的工具。而且,該儀表盤與其他儀表盤一樣,都需要在模型運行時捕獲相關變量的跟蹤信息,存入日誌,方可用於展示。

在PROFILE儀表盤的首頁上,顯示的是程序在TPU上運行的工作負載性能,它主要分為五個部分:Performance Summary、Step-time Graph、Top 10 Tensorflow operations executed on TPU、Run Environment和Recommendation for Next Step。如下圖七所示:

Tensorboard詳解(下篇)

圖七 tensorboard中的PROFILE欄目內容展開界面


(圖片來自tensorboard的github項目

https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/profile/docs/overview-page.png)

其中,Performance Summary包括以下四項:

1)所有采樣步驟的平均步長時間

2)主機空閒時間百分比

3)TPU空閒時間百分比

4)TPU矩陣單元的利用率

Run Environment(運行環境)包括以下五方面:

1)使用的主機數量

2)使用的TPU類型

3)TPU內核的數量

4)訓練批次的大小(batch size)

5)作業信息(構建命令和運行命令)

2. 總結

本系列介紹了tensorflow中一個非常重要的工具——tensorboard。Tensorboard是一個可視化工具,它能夠以直方圖、折線圖等形式展示程序運行過程中各標量、張量隨迭代輪數的變化趨勢,它也可以顯示高維度的向量、文本、圖片和音頻等形式的輸入數據,用於對輸入數據的校驗。Tensorflow函數與tensorboard欄目的對應關係如表1所示。

Tensorboard的可視化功能對於tensorflow程序的訓練非常重要,使用tensorboard進行調參主要分為以下幾步:

1)校驗輸入數據

如果輸入數據的格式是圖片、音頻、文本的話,可以校驗一下格式是否正確。如果是處理好的低維向量的話,就不需要通過tensorboard校驗。

2)查看graph結構

查看各個節點之間的數據流關係是否正確,再查看各個節點所消耗的時間和空間,分析程序優化的瓶頸。

3)查看各變量的變化趨勢

在SCALAR、HISTOGRAMS、DISTRIBUTIONS等欄目下查看accuracy、weights、biases等變量的變化趨勢,分析模型的性能

4)修改code

根據3)和4)的分析結果,優化代碼。

5)選擇最優模型

6)用Embedding Projector進一步查看error出處

Tensorboard雖然只是tensorflow的一個附加工具,但熟練掌握tensorboard的使用,對每一個需要對tensorflow程序調優的人都非常重要,它可以顯著提高調參工作的效率,幫助我們更快速地找到最優模型。

Tensorboard詳解(下篇)

表1 tensorflow函數與tensorboard欄目的對照表

對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.panchuang.net 我們的公眾號:磐創AI。


分享到:


相關文章: