天天看點

tensorboard ckpt pb 模型的輸出節點_Tensorboard詳解(下篇)

tensorboard ckpt pb 模型的輸出節點_Tensorboard詳解(下篇)
作者:花間提壺華小廚 歡迎大家關注我們的網站和系列教程:http://www.tensorflownews.com/,學習更多的機器學習、深度學習的知識!也可以搜尋号:磐創AI,關注我們的文章。 1. Tensorflow監控名額可視化

除了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 ckpt pb 模型的輸出節點_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 ckpt pb 模型的輸出節點_Tensorboard詳解(下篇)

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

此外,讀者可通過在儀表盤左側的輸入框中,編寫正規表達式來建立新檔案夾,進而組織标簽。

1.4 HISTOGRAMS

Tensorboard的張量儀表盤,統計tensorflow中的張量随着疊代輪數的變化情況。它用于展示通過tf.summary.histogram記錄的資料的變化趨勢。如下代碼所示:

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

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

tensorboard ckpt pb 模型的輸出節點_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 ckpt pb 模型的輸出節點_Tensorboard詳解(下篇)

圖四 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 ckpt pb 模型的輸出節點_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。

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 ckpt pb 模型的輸出節點_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 ckpt pb 模型的輸出節點_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 ckpt pb 模型的輸出節點_Tensorboard詳解(下篇)
最後,對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.tensorflownews.com。我們的号:磐創AI。

繼續閱讀