深度学习-Tensorflow2.2-Tensorboard可视化{5}-可视化基础-17
Tensorboard可視化簡介
TensorBoard是一款為了更方便 TensorFlow 程序的理解、調試與優(yōu)化發(fā)布的可視化工具。你可以用 TensorBoard 來展現(xiàn)你的 TensorFlow 圖像,繪制圖像生成的定量指標圖以及附加數(shù)據(jù)。
TensorBoard 通過讀取 TensorFlow 的事件文件來運行。
TensorFlow 的事件文件包括了你會在 TensorFlow 運行中涉及到的主要數(shù)據(jù)。
Tensorboard隨著tensorflow的安裝一并被安裝好
Tensorboard主要內容
一、通過 tf.keras 回調函數(shù)使用tensorboard
二、認識 tensorbaord界面
三、在 tf.keras回調函數(shù)中記錄自定義變量
四、在自定義循環(huán)中使用tensorboard
SCALARS 面板主要用于記錄諸如準確率、損失和學習率等單個值的變化趨勢。在代碼中用 tf.summary.scalar() 來將其記錄到文件中
每個圖的右下角都有 3 個小圖標,第一個是查看大圖,第二個是是否對 y 軸對數(shù)化,第三個是如果你拖動或者縮放了坐標軸,再重新回到原始位置。
GRAPHS 面板展示出你所構建的網(wǎng)絡整體結構,顯示數(shù)據(jù)流的方向和大小,也可以顯示訓練時每個節(jié)點的用時、耗費的內存大小以及參數(shù)多少。默認顯示的圖分為兩部分:主圖(Main Graph)和輔助節(jié)點(Auxiliary Nodes)。其中主圖顯示的就是網(wǎng)絡結構,輔助節(jié)點則顯示的是初始化、訓練、保存等節(jié)點。我們可以雙擊某個節(jié)點或者點擊節(jié)點右上角的 + 來展開查看里面的情況,也可以對齊進行縮放
DISTRIBUTIONS 主要用來展示網(wǎng)絡中各參數(shù)隨訓練步數(shù)的增加的變化情況,可以說是 多分位數(shù)折線圖 的堆疊。
HISTOGRAMS 和 DISTRIBUTIONS 是對同一數(shù)據(jù)不同方式的展現(xiàn)。與 DISTRIBUTIONS 不同的是,HISTOGRAMS 可以說是 頻數(shù)分布直方圖 的堆疊。
記錄自定義標量
重新調整回歸模型并記錄自定義學習率。這是如何做:
使用創(chuàng)建文件編寫器tf.summary.create_file_writer()。
定義自定義學習率功能。這將被傳遞給Keras LearningRateScheduler回調。
在學習率功能內,用于tf.summary.scalar()記錄自定義學習率。
將LearningRateScheduler回調傳遞給Model.fit()。
通常,要記錄自定義標量,您需要使用tf.summary.scalar()文件編寫器。文件編寫器負責將此運行的數(shù)據(jù)寫入指定的目錄,并在使用時隱式使用tf.summary.scalar()。
import tensorflow as tf import os import datetime(train_image,train_labels),(test_image,test_labels)=tf.keras.datasets.mnist.load_data() print(train_image.shape,train_labels,test_image.shape,test_labels) train_image = tf.expand_dims(train_image,-1)# 擴充維度 test_image = tf.expand_dims(test_image,-1)# 擴充維度 train_image.shape,test_image.shape # 改變數(shù)據(jù)類型 train_image = tf.cast(train_image/255,tf.float32) # 歸一化并改變數(shù)據(jù)類型 train_labels = tf.cast(train_labels,tf.int64) test_image = tf.cast(test_image/255,tf.float32) # 歸一化并改變數(shù)據(jù)類型 test_labels = tf.cast(test_labels,tf.int64) train_dataset = tf.data.Dataset.from_tensor_slices((train_image,train_labels)) # 建立數(shù)據(jù)集 test_dataset = tf.data.Dataset.from_tensor_slices((test_image,test_labels)) print(train_dataset,test_dataset) train_dataset = train_dataset.repeat().shuffle(60000).batch(128) # 對數(shù)據(jù)進行洗牌 test_dataset = test_dataset.repeat().batch(128) # 對數(shù)據(jù)進行洗牌 print(train_dataset,test_dataset) # 建立模型 model = tf.keras.Sequential([tf.keras.layers.Conv2D(16,[3,3],activation="relu",input_shape=(None,None,1)),tf.keras.layers.Conv2D(32,[3,3],activation="relu"),tf.keras.layers.GlobalMaxPool2D(),tf.keras.layers.Dense(10,activation="softmax") ]) # 編譯模型 model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=["acc"]) log_dir = os.path.join("logs",datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))# 圖的存放路徑加時間 file_writer = tf.summary.create_file_writer(log_dir + "/lr") file_writer.set_as_default() def lr_sche(epoch):learning_rate = 0.2 # 默認速率0.2if epoch > 5 :learning_rate = 0.02if epoch > 10 :learning_rate = 0.01if epoch > 20:learning_rate = 0.005tf.summary.scalar("leaning_rate",data = learning_rate,step=epoch)return learning_rate# 可視化 tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir,histogram_freq=1) lr_callback = tf.keras.callbacks.LearningRateScheduler(lr_sche) # 訓練 model.fit(train_dataset,epochs=25,steps_per_epoch=60000//128,validation_data=test_dataset,validation_steps=10000//128,callbacks=[tensorboard_callback,lr_callback])自定義訓練中使用tensorboard
import tensorflow as tf import os import datetime (train_image,train_labels),(test_image,test_labels)=tf.keras.datasets.mnist.load_data()# 劃分數(shù)據(jù)集 train_image = tf.expand_dims(train_image,-1)# 擴充維度 test_image = tf.expand_dims(test_image,-1)# 擴充維度 # 改變數(shù)據(jù)類型 train_image = tf.cast(train_image/255,tf.float32) # 歸一化并改變數(shù)據(jù)類型 train_labels = tf.cast(train_labels,tf.int64) test_image = tf.cast(test_image/255,tf.float32) # 歸一化并改變數(shù)據(jù)類型 test_labels = tf.cast(test_labels,tf.int64) train_dataset = tf.data.Dataset.from_tensor_slices((train_image,train_labels)) # 建立數(shù)據(jù)集 test_dataset = tf.data.Dataset.from_tensor_slices((test_image,test_labels)) train_dataset = train_dataset.repeat().shuffle(60000).batch(128) # 對數(shù)據(jù)進行洗牌 test_dataset = test_dataset.repeat().batch(128) # 對數(shù)據(jù)進行洗牌 print(train_dataset,test_dataset) # 建立模型 model = tf.keras.Sequential([tf.keras.layers.Conv2D(16,[3,3],activation="relu",input_shape=(None,None,1)),tf.keras.layers.Conv2D(32,[3,3],activation="relu"),tf.keras.layers.GlobalMaxPool2D(),tf.keras.layers.Dense(10) # 未激活 ]) # 自定義循環(huán)(編譯) optimizers = tf.keras.optimizers.Adam() # 優(yōu)化函數(shù) loss_func = tf.keras.losses.SparseCategoricalCrossentropy() # 損失函數(shù) def loss(model,x,y):y_ = model(x)return loss_func(y,y_) train_loss = tf.keras.metrics.Mean("train_loss") train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy("train_accuracy")train_loss = tf.keras.metrics.Mean("test_loss") train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy("test_accuracy") def train_step(model,images,labels):with tf.GradientTape() as t:pred = model(images)loss_step = loss_func(labels,pred)grads = t.gradient(loss_step,model.trainable_variables)optimizers.apply_gradients(zip(grads,model.trainable_variables))train_loss(loss_step)train_accuracy(labels,pred) def test_step(model,images,labels):with tf.GradientTape() as t:pred = model(images)loss_step = loss_func(labels,pred)grads = t.gradient(loss_step,model.trainable_variables)optimizers.apply_gradients(zip(grads,model.trainable_variables))train_loss(loss_step)train_accuracy(labels,pred) log_dir = os.path.join("logs",datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))# 圖的存放路徑加時間 train_log_dir = "logs/gradient_tape" + log_dir + "train" test_log_dir = "logs/gradient_tape" + log_dir + "test" train_writer = tf.summary.create_file_writer(train_log_dir) test_writer = tf.summary.create_file_writer(test_log_dir) def train():for epoch in range(10):for (batch, (images, labels)) in enumerate(train_dataset):train_step(model, images, labels)print('.', end='')with train_writer.as_default():tf.summary.scalar('loss', train_loss.result(), step=epoch)tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)for (batch, (images, labels)) in enumerate(test_dataset):test_step(model, images, labels)print('*', end='')with test_writer.as_default():tf.summary.scalar('loss', test_loss.result(), step=epoch)tf.summary.scalar('accuracy', test_accuracy.result(), step=epoch)template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'print(template.format(epoch+1,train_loss.result(), train_accuracy.result()*100,test_loss.result(), test_accuracy.result()*100))train_loss.reset_states()train_accuracy.reset_states()test_loss.reset_states()test_accuracy.reset_states() train()總結
以上是生活随笔為你收集整理的深度学习-Tensorflow2.2-Tensorboard可视化{5}-可视化基础-17的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习-Tensorflow2.2-E
- 下一篇: 深度学习-Tensorflow2.2-预