1. 程式人生 > 實用技巧 >使用tensorboard視覺化模型

使用tensorboard視覺化模型

  Tensorboard是TF自帶的視覺化工具。它可以讓我們從各個角度觀察與修改模型,比如觀察模型在訓練時的loss動態變化曲線而無需在迭代完畢後再畫圖、繪製神經網路的結構圖、調節超引數等。下面以最簡單的形式展示tensorboard的常用功能。

開啟tensorboard

  開啟命令列輸入

tensorboard --logdir logs

  然後回車。前兩個引數固定,第三個引數表示tensorboard所要觀察的資料夾位置。後面再使用TF將資訊寫入該資料夾中,tensorboard就可以從中讀取資料用於視覺化。輸出如下:

  進入得到的連結,就是tensorboard的介面了。這時你的logs資料夾應該還是空的,沒有寫入資料,所以tensorboard無法視覺化。下面介紹如何向資料夾中寫入資料。

Scalars

  Scalars用來視覺化時間步下的狀態曲線,比如loss的變化曲線。下面是程式碼示例:

import numpy as np
import tensorflow as tf 
from datetime import datetime


current_time = datetime.now().strftime("%Y{y}%m{m}%d{d}-%H-%M-%S").format(y = '',m = '',d='')
log_path = 'logs/'+current_time#——————1——————
log_writer = tf.summary.create_file_writer(log_path)#
——————2—————— for i in range(100): data1 = np.random.normal()#——————3—————— data2 = np.random.normal()#——————3—————— with log_writer.as_default():#——————4—————— tf.summary.scalar('test1', data1, i) #——————5—————— tf.summary.scalar('test2', data2, i) #——————5——————

  #1/2:建立以時間命名的用於儲存記錄的檔案,並獲取用於往該檔案中寫入記錄的物件例項。注意!檔案要儲存在logs資料夾中,tensorboard才能讀取。

  #3:定義每次迭代要記錄的值。

  #4/5:使用#2定義的物件將記錄以scalar的方式寫入,scalar實際上就是畫折線圖,其中三個引數分別代表是:記錄名、這次迭代要儲存的值、第幾次迭代。可以看出,一個檔案可以儲存多條記錄,而每條記錄都含有多次迭代。

  在tensorboard介面中,右上角點選重新整理,或者在下拉選項中選擇scalar,tensorboard就會顯示輸出的記錄。介面中還能調節平滑度什麼的,這裡就不記錄了。Tensorboard的一大好處在於它能在程式碼執行的時候同步視覺化影象,上面的程式碼示例僅有100次迭代,不好體現,可以自己嘗試一下。

  視覺化後的折線圖介面如下:

Graphs

  視覺化模型結構,但是顯示出來的結構很亂,幾乎沒法看,暫時沒弄懂看的是什麼。這裡先記錄顯示流程。程式碼示例如下:

import numpy as np 
from tensorflow.keras import Input,Model,layers,losses,callbacks 

logdir="logs/test"  
tensorboard_callback = callbacks.TensorBoard(log_dir=logdir)#——————1——————
class TestModel(Model):#——————2——————
  def __init__(self):
    super().__init__()
    self.layer1 = layers.Dense(10) 
    self.layer2 = layers.Dense(1)
  def call(self,inputs):
    x = self.layer1(inputs) 
    x = self.layer2(x)
    return x
model = TestModel()#——————3——————
model.compile(optimizer='rmsprop',loss='mse')#——————4——————
model.fit(np.ones([3,10]),
          np.ones([3,1]),
          callbacks=[tensorboard_callback]) #——————5——————

  #1:定義儲存模型結構的檔案,獲取一個回撥函式物件,用於在fit的時候將模型計算圖記錄並儲存。

  #2:繼承Model類自定義我們的模型,只要實現以上兩個函式即可。

  #3/4/5:例項化模型、編譯,然後fit,讓上面定義的回撥函式過一遍我們的模型,這樣一來它就能將結構記錄下來了。

  然後開啟tensorboard網頁,右上角下拉選中GRAPH,就能看到畫出的圖了。如下圖(顯示的玩意兒看不太懂):

  另外,因為是在fit中儲存的結構,所以它在儲存的時候會多包一層train資料夾。

Hparams

  超引數優化。暫時用不到,以後再記錄。