
除了GRAPHS欄目外,tensorboard還有IMAGES、AUDIO、SCALARS、HISTOGRAMS、DISTRIBUTIONS、FROJECTOR、TEXT、PR CURVES、PROFILE九個欄目,本小節将詳細介紹這些子欄目各自的特點和用法。
1.1 IMAGES
圖像儀表盤,可以顯示通過tf.summary.image()函數來儲存的png圖檔檔案。
1. # 指定圖檔的資料源為輸入資料x,展示的相對位置為[-1,28,28,1]
2. image_shape=tf.reshape(x, [-1, 28, 28,1])
3. # 将input命名空間下的圖檔放到summary中,一次展示10張
4. tf.summary.image('input', image_shape, 10)
如上面代碼,将輸入資料中的png圖檔放到summary中,準備後面寫入日志檔案。運作程式,生成日志檔案,然後在tensorboard的IMAGES欄目下就會出現如下圖一所示的内容(實驗用的是mnist資料集)。儀表盤設定為每行對應不同的标簽,每列對應一個運作。圖像儀表盤僅支援png圖檔格式,可以使用它将自定義生成的可視化圖像(例如matplotlib散點圖)嵌入到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()記錄的資料的變化趨勢。如下所示代碼可添加到程式中,用于記錄學習率的變化情況。
1. # 在learning_rate附近添加,用于記錄learning_rate
2. tf.summary.scalar('learning_rate', learning_rate)
Scalars欄目能進行的互動操作有:
- 點選每個圖表左下角的藍色小圖示将展開圖表
- 拖動圖表上的矩形區域将放大
- 輕按兩下圖表将縮小
- 滑鼠懸停在圖表上會産生十字線,資料值記錄在左側的運作選擇器中。
圖二 tensorboard中的SCALARS欄目内容展開界面
此外,讀者可通過在儀表盤左側的輸入框中,編寫正規表達式來建立新檔案夾,進而組織标簽。
1.4 HISTOGRAMS
Tensorboard的張量儀表盤,統計tensorflow中的張量随着疊代輪數的變化情況。它用于展示通過tf.summary.histogram記錄的資料的變化趨勢。如下代碼所示:
1. tf.summary.histogram(weights, 'weights')
上述代碼将神經網絡中某一層的權重weight加入到日志檔案中,運作程式生成日志後,啟動tensorboard就可以在HISTOGRAMS欄目下看到對應的展開圖像,如下圖三所示。每個圖表顯示資料的時間“切片”,其中每個切片是給定步驟處張量的直方圖。它依據的是最古老的時間步原理,目前最近的時間步在最前面。通過将直方圖模式從“偏移”更改為“疊加”,如果是透視圖就将其旋轉,以便每個直方圖切片都呈現為一條互相重疊的線。
圖三 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中的DISTRIBUTIONS欄目内容展開界面
1.6 PROJECTOR
嵌入式投影儀表盤,全稱Embedding Projector,是一個互動式的可視化工具,通過資料可視化來分析高維資料。例如,讀者可在模型運作過程中,将高維向量輸入,通過embedding projector投影到3D空間,即可檢視該高維向量的形式,并執行相關的校驗操作。Embedding projector的建立主要分為以下幾個步驟:
1)建立embedding tensor
1. #1. 建立 embeddings
2. embedding_var = tf.Variable(batch_xs, name="mnist_embedding")
3. summary_writer = tf.summary.FileWriter(LOG_DIR)
2)建立embedding projector 并配置
1. config = projector.ProjectorConfig()
2. embedding = config.embeddings.add()
3. embedding.tensor_name = embedding_var.name
4. embedding.metadata_path = path_for_mnist_metadata #'metadata.tsv'
5. embedding.sprite.image_path = path_for_mnist_sprites #'mnistdigits.png'
6. embedding.sprite.single_image_dim.extend([28,28])
7. projector.visualize_embeddings(summary_writer, config)
3)将高維變量儲存到日志目錄下的checkpoint檔案中
1. sess = tf.InteractiveSession()
2. sess.run(tf.global_variables_initializer())
3. saver = tf.train.Saver()
4. saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"), 1)
4)将metadata與embedding聯系起來,将 vector 轉換為 images,反轉灰階,建立并儲存 sprite image
1. to_visualise = batch_xs
2. to_visualise = vector_to_matrix_mnist(to_visualise)
3. to_visualise = invert_grayscale(to_visualise)
4. sprite_image = create_sprite_image(to_visualise)
5. plt.imsave(path_for_mnist_sprites,sprite_image,cmap='gray')
5)運作程式,生成日志檔案,啟動服務,tensorboard中的PROJECTOR欄将展示投影後的資料的動态圖,如下圖五所示。
圖五 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。
1. # labels為輸入的y, predition為預測的y值
2. # num_thresholds為多分類的類别數量
3. tensorboard.summary.pr_curve(name='foo',
4. predictions=predictions,
5. labels=labels,
6. num_thresholds=11)
圖六 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中的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程式調優的人都非常重要,它可以顯著提高調參工作的效率,幫助我們更快速地找到最優模型。