【Tensorflow_DL_Note16】TensorFlow視覺化學習3_引數,準確率的視覺化
一 Tensorboard的簡介
TensorBoard是Tensorflow的視覺化工具,它可以通過Tensorflow程式執行過程中輸出的【日誌檔案】視覺化Tensorflow程式的執行狀態。TensorBoard和Tensorflow程式跑在不同的程式中,TensorBoard會自動讀取最新的Tensorflow【日誌檔案】,並呈現當前Tensorflow程式執行的最新狀態。下面展示一個簡單的Tensorflow程式,在這個程式中,完成了Tensorflow的日誌輸出功能。
import tensorflow as tf #【1】定義一個簡單的計算圖,實現向量加法的操作 input1 = tf.constant([1.0,2.0,3.0],name='input1') input2 = tf.Variable(tf.random_uniform([3]),name='input2') output = tf.add_n([input1,input2],name='add') #【2】生成一個寫日誌的writer,並將當前的TensorFlow計算圖寫入日誌。Tensorflow提供了多種寫日誌檔案的API writer = tf.summary.FileWriter('F:/cifar-10-batches-py',tf.get_default_graph()) writer.close()
執行上面的程式碼,會輸出Tensorflow計算圖的資訊,具體輸出的資訊如下所示:
然後,在PyCharm的Terminal視窗中輸入:tensorboard --logdir=F:/cifar-10-batches-py 命令,回車執行,會輸出下面的資訊,如下所示:
將http://DESKTOP-DAQOBTJ:6006 輸入到瀏覽器中,便可以看見視覺化的結果,如下所示。
執行上面的命令,會啟動一個服務,這個服務的埠預設為6006。最終,這個計算圖的視覺化,如上所示。
二 Tensorboard的資料形式和視覺化過程
2.1 TensorBoard的資料形式
TensroBoard可以記錄與展示如下的資料形式,如上圖右邊的橙色下拉選單所示:
[1]SCALARS:標量
[2]IMAGES:圖片
[3]AUDIO:音訊
[4]DEBUGGER:偵錯程式
[5]GRAPH:計算圖
[6]DISTRIBUTION:資料分佈
[7]HISTOGRAMS:直方圖
[8]TEXT:文字等
2.2 TensorBoard的視覺化過程
1 : 首先,建立一個計算圖tf.Graph
2 : 確定要在計算圖Graph中的那些節點放置summary operations以記錄資訊
使用tf.summary.scalar()記錄標量的執行狀態資訊;使用tf.summary.image()記錄圖片的執行狀態資訊;使用tf.summary.audio()記錄Tensorflow中的音訊資訊;使用tf.summary.graph()記錄計算圖資訊;使用tf.summary.distribution()記錄資料的分佈圖
3 : operations並不會真的去執行計算, 除非你已經建立了一個會話tf.Session(),然後,指定它們去run.而我們上一步建立的這些summary operations其實並不被其他節點依賴,因此,我們需要特地的去執行所有的summary節點。但是,如果逐個的指定並執行上面建立的這些summary的話, 一個程式下來太過於繁瑣,因此,我們使用tf.summary.merge_all去將上面建立的所有的summary節點合併成一個節點,最後,我們只需要對這個節點執行計算即可,sess.run()
4 : 第四步使用tf.summary.FileWrite將執行後的資料儲存到磁碟中
5 : 最後,執行整個程式,並在命令列輸入tensorboard --logdir=F:/cifar-10-batches-py 命令,就可以在web中檢視視覺化的結果
三 Tensorboard的案例分析
此塊,我們使用最基礎的MNIST手寫體數字識別案例。
#=======================================================================================================================
#檔案說明:
# Tensorflow中,監控指標的視覺化
# 開發環境:
# Win10+Tensorflow+OpenCv3.3+Python3.5+PyCharm5.0.3
# 時間地點:
# 陝西師範大學 文津樓 2018.5.13
# 作者:
# 九月
#=======================================================================================================================
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
BATCH_SIZE = 10
TRAIN_STEPS = 5000
SUMMARY_DIR = 'F:/MnistSet'
#=======================================================================================================================
#函式說明:
# 生成變數監控資訊,並定義生成監控資訊日誌檔案的操作
#引數說明:
# [1]var :需要監控和記錄執行狀態的張量
# [2]name:給出了視覺化結果中顯示的圖表名稱
#=======================================================================================================================
def variable_summaries(var,name):
with tf.name_scope('summaries'):
tf.summary.histogram(name,var)
mean = tf.reduce_mean(var)
tf.summary.scalar('mean/'+name,mean)
stddev = tf.sqrt(tf.reduce_mean(tf.square(var-mean)))
tf.summary.scalar('stddev/'+name,stddev)
#=======================================================================================================================
#函式說明:
# 生成一層全連線層神經網路
#=======================================================================================================================
def nn_layer(input_tensor,input_dim,output_dim,layer_name,act=tf.nn.relu):
with tf.name_scope(layer_name):
with tf.name_scope('weights'):
weights = tf.Variable(tf.truncated_normal([input_dim,output_dim],stddev=0.1))
variable_summaries(weights,layer_name+'/weights')
with tf.name_scope('biases'):
biases = tf.Variable(tf.constant(0.0,shape=[output_dim]))
variable_summaries(biases,layer_name+'/biases')
with tf.name_scope('Wx_plus_b'):
preactivate = tf.matmul(input_tensor,weights)+biases
tf.summary.histogram(layer_name+'/pre_activvations',preactivate)
activations = act(preactivate,name='activation')
tf.summary.histogram(layer_name+'/activations',activations)
return activations
#=======================================================================================================================
#函式說明:
# Main函式
#=======================================================================================================================
def main(argv=None):
#【1】從磁碟載入資料
mnist = input_data.read_data_sets('F:/MnistSet/',one_hot=True)
#【2】定義兩個【佔位符】,作為【訓練樣本圖片/此塊樣本作為特徵向量存在】和【類別標籤】的輸入變數,並將這些佔位符存在名稱空間input中
with tf.name_scope('input'):
x = tf.placeholder('float', [None, 784],name='x-input')
y_ = tf.placeholder('float', [None, 10], name='y-input')
#【2】將【輸入的特徵向量】還原成【圖片的畫素矩陣】,並通過tf.summary.image函式定義將當前圖片資訊作為寫入日誌的操作
with tf.name_scope('input_reshape'):
image_shaped_input = tf.reshape(x,[-1,28,28,1])
tf.summary.image('input',image_shaped_input,10)
#【3】建立【神經網路的結構】
hidden1 = nn_layer(x,784,500,'layer1')
y = nn_layer(hidden1,500,10,'layer2',act=tf.identity)
#【4】定義【損失函式】,【交叉熵損失函式】,並生成【交叉熵損失】的【監控日誌】
with tf.name_scope('cross_entropy'):
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
tf.summary.scalar('corss_entropy',cross_entropy)
#【5】定義【神經網路損失函式的優化方法】,即神經網路的優化方法
with tf.name_scope('train'):
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
#【6】計算【模型】早當前給定資料集上的正確率
with tf.name_scope('accuracy'):
with tf.name_scope('correct_prediction'):
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
with tf.name_scope('accuracy'):
accuracy= tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
tf.summary.scalar('accuracy',accuracy)
#【7】整理Tensorflow中所有的日誌操作
merged = tf.summary.merge_all()
#【8】建立回話Session
with tf.Session() as sess:
#【9】例項化一個FileWriter的類物件,並將當前TensoirFlow的計算圖寫入【日誌檔案】
summary_writer = tf.summary.FileWriter(SUMMARY_DIR,sess.graph)
#【10】Tensorflow中建立的變數,在使用前必須進行初始化,下面這個為初始化函式
tf.global_variables_initializer().run()
#【11】開始訓練
for i in range(TRAIN_STEPS):
xs,ys = mnist.train.next_batch(BATCH_SIZE)
#【12】執行訓練步驟以及所有的【日誌檔案生成操作】,得到這次執行的【日誌檔案】。
summary,_,acc = sess.run([merged,train_step,accuracy],feed_dict={x:xs,y_:ys})
print('Accuracy at step %s: %s' % (i, acc))
#【13】將所有的日誌寫入檔案,TensorFlow程式就可以那這次執行日誌檔案,進行各種資訊的視覺化
summary_writer.add_summary(summary,i)
summary_writer.close()
#========================================================================================================
#模組說明:
# Tensorflow提供的一個主程式入口,tf.app.run函式將會呼叫上面的main函式
#========================================================================================================
if __name__ == '__main__':
tf.app.run()
然後,輸入指令tensorboard --logdir=F:/MnistSet,在web中看見視覺化的資訊,視覺化結果如下所示:
相關文章
- 【Tensorflow_DL_Note15】TensorFlow視覺化學習2-用Matplotlib視覺化視覺化
- 【TensorFlow篇】--Tensorflow框架視覺化之Tensorboard框架視覺化ORB
- Django 視覺化Web展示 學習Django視覺化Web
- 視覺化視覺化
- 視覺化學習:WebGL的基礎使用視覺化Web
- 「深度學習系列」CNN模型的視覺化深度學習CNN模型視覺化
- 深度學習(視覺化卷積核)深度學習視覺化卷積
- 【Tensorflow_DL_Note14】TensorFlow視覺化學習1-Tensorflow與OpenCv混合程式設計視覺化OpenCV程式設計
- 3D視覺化|疫情態勢視覺化3D視覺化
- 【Tensorflow_DL_Note17】TensorFlow視覺化學習4_tf.summary模組的詳解視覺化
- 學習python視覺化,matplotlib庫學習,基本操作Python視覺化
- 視覺化portainer視覺化AI
- Matlab學習-視覺化和程式設計Matlab視覺化程式設計
- 視覺化醫學影像CT視覺化
- Echarts檢視視覺化-學習筆記(努力更新中)Echarts視覺化筆記
- 資料視覺化基本原理——視覺化模型視覺化模型
- CNN視覺化技術總結(三)--類視覺化CNN視覺化
- 【Tensorflow_DL_Note3】深度學習中的資料處理及其視覺化深度學習視覺化
- 什麼是資料視覺化?hightopo資料視覺化助力企業數字化視覺化
- 資料視覺化Seaborn從零開始學習教程(三) 資料分佈視覺化篇視覺化
- 從零開始學機器學習——準備和視覺化資料機器學習視覺化
- Numpy的Matplotlib視覺化視覺化
- 視覺化之資料視覺化最強工具推薦視覺化
- 資料視覺化如何選擇合適的視覺化圖表?視覺化
- 視覺化學習:WebGL實現縮放平移視覺化Web
- github repository視覺化Github視覺化
- 資料視覺化的基本原理——視覺通道視覺化
- Python——視覺化神器pyecharts的正確開啟方式Python視覺化Echarts
- 視覺化影像處理 | 視覺化訓練器 | 影像分類視覺化
- 視覺學習(三)視覺
- 獲獎的資料視覺化示例 讓人視覺震撼視覺化
- 視覺化學習:使用WebGL實現網格背景視覺化Web
- 視覺化學習:CSS transform與仿射變換視覺化CSSORM
- 視覺化學習 | 如何使用噪聲生成紋理視覺化
- 視覺化中的資料視覺化
- 我理解的前端視覺化前端視覺化
- 資料視覺化的秘密視覺化
- 資料視覺化的作用視覺化