【TF-2-3】Tensorflow-可視化(TensorBoard)


目錄

  1. TensorBoard簡介
  2. TensorBoard主要API
  3. 面板介紹
  4. 執行步驟
  5. 實例說明

TensorFlow中,最常用的可視化方法有三種途徑,分別為TensorFlowOpenCv的混合編程、利用Matpltlib進行可視化、利用TensorFlow自帶的可視化工具TensorBoard進行可視化。這三種方法中,TensorFlow中最重要的可視化方法是通過tensorBoardtf.summarytf.summary.FileWriter這三個模塊相互合作來完成的。而且需要結合【TF-2-2Tensorflow-變量作用域,這一篇文章整合使用。

一、TensorBoard簡介

TensorBoardTensorFlow官方推出的可視化工具,它可以將模型訓練過程中的各種匯總數據展示出來,包括標量(Scalar)、圖片(Images)、音頻(Audio)、計算圖(Graphs)、數據分布(Distributions)、直方圖(Histograms)和嵌入向量(Embeddings)。在訓練大型深度學習神經網絡時,中間計算過程非常復雜,為了理解調試和優化我們設計的網絡,我們可以使用TensorBoard觀察訓練過程中各種可視化數據。如果要使用TensorBoard展示數據,我們需要在執行TensorFlow計算圖的過程中,將各種類型的數據匯總並記錄到日志文件中。然后使用TensorBoard讀取這些日志文件,解析數據並生成可視化的Web界面,讓我們可以在瀏覽器中觀察各種匯總的數據。

TensorBoard安裝:在通過pip安裝TensorFlow的情況下,默認也會安裝TensorBoard。通過TensorBoard可以展示TensorFlow的圖像、繪制圖像生成的定量指標以及附加數據等信息

二、TensorBoard主要API

TensorBoard通過讀取TensorFlow的事件文件來運行,TensorFlow的事件文件包括了在TensorFlow運行中涉及到的主要數據,比如:scalar、image、audio、histogram和graph等。通過tf.summary相關API,將數據添加summary中,然后在Session中執行這些操作得到一個序列化Summary protobuf對象,然后使用FileWriter對象將匯總的序列數據寫入到磁盤,然后使用tensorboard命令進行圖標展示,默認訪問端口是:6006

API

描述

tf.summary.scalar

添加一個標量

tf.summary.audio

添加一個音頻變量

tf.summary.image

添加一個圖片變量

tf.summary.histogram

添加一個直方圖變量

tf.summary.text

添加一個字符串類型的變量(一般很少用)

三、面板介紹

3.1 SCALARS面板

SCALARS 面板,統計tensorflow中的標量(如:學習率、模型的總損失)隨着迭代輪數的變化情況。SCALARS 面板的左邊是一些選項,包括Split on undercores(用下划線分開顯示)、Data downloadlinks(數據下載鏈接)、Smoothing(圖像的曲線平滑程度)以及Horizontal Axis(水平軸)的表示,其中水平軸的表示分3 種(STEP 代表迭代次數,RELATIVE 代表按照訓練集和測試集的相對值,WALL 代表按照時間)。圖中右邊給出了准確率變化曲線。

如下圖二所示,SCALARS欄目顯示通過函數tf.summary.scalar()記錄的數據的變化趨勢。如下所示代碼可添加到程序中,用於記錄學習率的變化情況。

tf.summary.scalar('accuracy', accuracy)

3.2 GRAPHS

GRAPHS 面板是對理解神經網絡結構最有幫助的一個面板,它直觀地展示了數據流圖。下圖所示界面中節點之間的連線即為數據流,連線越粗,說明在兩個節點之間流動的張量(tensor)越多。

GRAPHS 面板的左側,可以選擇迭代步驟。可以用不同Color(顏色)來表示不同的Structure(整個數據流圖的結構),或者用不同Color 來表示不同Device(設備)。例如,當使用多個GPU 時,各個節點分別使用的GPU 不同。當我們選擇特定的某次迭代時,可以顯示出各個節點的Compute time(計算時間)以及Memory(內存消耗)。

四、執行步驟

4.1 運行編寫好的程序,"logs"文件夾下得到保存文件

4.2 打開cmd(必須給定對應的數據聚合文件路徑信息(tensorboard --logdir path/to/logs)),進入logs文件夾同級目錄

4.3 運行 tensorboard --logdir=logs (注意不要用"logs")

4.4 打開Google Chrome(其他瀏覽器不保證),輸入:http://localhost:6006.

五、實例說明

本實例采用tf.summary.scalar API進行說明:

  1. 代碼:
    1 	import tensorflow as tf
    2 	with tf.variable_scope("foo"):
    3 	    with tf.device("/cpu:0"):
    4 	        x_init1 = tf.get_variable('init_x', [10], tf.float32, initializer=tf.random_normal_initializer())[0]
    5 	        x = tf.Variable(initial_value=x_init1, name='x')
    6 	        y = tf.placeholder(dtype=tf.float32, name='y')
    7 	        z = x + y
    8 	    # update x
    9 	    assign_op = tf.assign(x, x + 1)
   10 	    with tf.control_dependencies([assign_op]):
   11 	        with tf.device('/gpu:0'):
   12 	            out = x * y
   13 	with tf.device('/gpu:0'):
   14 	    with tf.variable_scope("bar"):
   15 	        a = tf.constant(3.0) + 4.0
   16 	    w = z * a
   17 	# 開始記錄信息(需要展示的信息的輸出)
   18 	tf.summary.scalar('scalar_init_x', x_init1)
   19 	tf.summary.scalar(name='scalar_x', tensor=x)
   20 	tf.summary.scalar('scalar_y', y)
   21 	tf.summary.scalar('scalar_z', z)
   22 	tf.summary.scalar('scala_w', w)
   23 	tf.summary.scalar('scala_out', out)
   24 	with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess:
   25 	    # merge all summary
   26 	    merged_summary = tf.summary.merge_all()
   27 	    writer = tf.summary.FileWriter('./result', sess.graph)  # 得到輸出到文件的對象
   28 	    sess.run(tf.global_variables_initializer())  # 初始化
   29 	    # print
   30 	    for i in range(1, 5):
   31 	        summary, r_out, r_x, r_w = sess.run([merged_summary, out, x, w], feed_dict={y: i})
   32 	        writer.add_summary(summary, i)
   33 	        print("{},{},{}".format(r_out, r_x, r_w))
   34 	    writer.close()    # 關閉操作

 

1)ensorBoard顯示的時候,必須給定對應的數據聚合文件路徑信息(tensorboard --logdir path/to/logs)。再瀏覽器輸入:http://localhost:6006.

2)進入對應環境,cmd輸入:

tensorboard --logdir C:\Users\wangyifan\PycharmProjects\benfengwangML202003\DeepLearning01

3)瀏覽器http://localhost:6006

運行結果:方便查看和趨勢和網絡。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM