iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 11
0

針對模型視覺化,Tensorflow有做了一個Dashboard - Tensorboard,方便使用者理解模型以及tuning。而Tensorboard非常強大,不僅可視覺化模型的matrix、視覺化embedding,到最近的功能是可以做parameter tuning及視覺化的部分,下圖為簡易的Tensoboard的示意圖。
https://ithelp.ithome.com.tw/upload/images/20190926/20119971dLAqBL0rt8.png

而Tensorboard的架構如下圖所示,其實就是利用產生的logs,使用tf.summary的API將您所定義的tag下的資料放到分類的Dashboard下(Ex: scalars, image 等等)。一般來說,設計的步驟會是先利用tf.namespece把要畫的對象包起來(TF1.X),TF2.0就可以不用包tf.namespece,接下來在用tf.summary的方法來呈現資料,或者將資料寫到目標folder,最後呈現在Tensorboard上。
https://ithelp.ithome.com.tw/upload/images/20190926/20119971UZPLJEuF8F.png
source

先從簡易的範例,直接使用高階keras api來run tensorboard,我們一樣先用fashion mnist做為範例

fashion_mnist = tf.keras.datasets.fashion_mnist
  
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

接下來,我們可以create一個簡易的模型

def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])

接下來就,compile model以及train model。這邊的話,我們直接使用tf.keras.callback.TensorBoard的api,他直接幫你寫好一些matrix。

def train_model():
  model = create_model()
  model.compile(optimizer='adam',
                loss='categorical_crossentropy',
                metrics=['accuracy'])
  logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
  tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
  model.fit(x=x_train, 
            y=y_train, 
            epochs=5, 
            validation_data=(x_test, y_test), 
            callbacks=[tensorboard_callback])

train_model()

https://ithelp.ithome.com.tw/upload/images/20190926/20119971n5OvMNtsJM.png

Colab很方便的一個點是,Tensorboard可以直接呈現在上面,不需要額外開browser。此外,像keras api,很多Tensorboard的tag、Dashboard他都幫你包好了

%tensorboard --logdir logs

Scalars
https://ithelp.ithome.com.tw/upload/images/20190926/20119971i51J3CaiMr.png

Graph
https://ithelp.ithome.com.tw/upload/images/20190926/20119971c5KHlROQsQ.png

接下來我們就稍微advaced一點點,來自定義Dashboard跟tag,以及傳一些image進Tensorboard。首先,就先決定好路徑以及log的writer

logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
log_writer = tf.summary.create_file_writer(logdir)

假如今天我們想傳一張照片進去Tensorboard就可以使用以下

data_img = next(data_iter)[0]
data_img = data_img[0]
data_img = tf.reshape(data_img,[1,28,28,1])

with log_writer.as_default():
  tf.summary.image("Training data 0:",data_img,step=0)

https://ithelp.ithome.com.tw/upload/images/20190926/201199719vMQSruaRN.png
是不是很詭異

若我們今天想看多張一點圖並在一起,就可以使用自定義的畫圖function來做,Ex:

def image_grid(images):
  figure = plt.figure(figsize=(10,10))
  for i in range(25):
    plt.subplot(5,5,i+1,title="name")
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(images[i],cmap=plt.cm.binary)
  return figure

val_images = x[:25]
val_images = tf.reshape(val_images,[-1,28,28,1])
  with log_writer.as_default():
    tf.summary.image("val_images:",val_images,max_outputs=25,step=i)
    val_images = tf.reshape(val_images,[-1,28,28])
    fig = image_grid(val_images)
    tf.summary.image('val_images:',plot_image(fig),step=i)

https://ithelp.ithome.com.tw/upload/images/20190926/20119971e4nujT1eHQ.png

而當我們想要定義一些想看的matrix,就可以在scalar裡面去定義,我們就先簡單的定義training loss跟Validation accuracy。

Training loss的話可以直接接在每一圈train完後,把資料結果輸出

print(i,step,'loss:',float(loss))
with log_writer.as_default():
   tf.summary.scalar("training_loss",float(loss),step=i)

Validation accuracy也是差不多

with log_writer.as_default():
  tf.summary.scalar("val-acc",float(total_loss/total_num),step=i)

https://ithelp.ithome.com.tw/upload/images/20190926/20119971vdV5EdFm1M.png

小結:

Tensorboard真的有點很多功能可以玩玩看,還有一些embedding以及新的parameter tuning功能大家可以嘗試玩玩看。除了Tensorboard,像Pytorch也有Visdom大家可以拿來比較玩玩看,Reference都有我寫的Colab可以拿來玩玩看。這是今天Tensorboard的部分,感謝大家漫長閱讀!

一天一梗圖:

https://ithelp.ithome.com.tw/upload/images/20190926/20119971yTzLBoW8z9.png
source

Reference:

Tensorboard_可視化

Tensorboard TF 1.X vs TF 2.0

Tensorboard_keras_Colab

Tesnorboard_api_Colab


上一篇
[Day-10] Overfit & Underfit
下一篇
[Day-12] TF.Keras api & Customized
系列文
Towards Tensorflow 2.030

尚未有邦友留言

立即登入留言