【Tensorflow_DL_Note17】TensorFlow視覺化學習4_tf.summary模組的詳解
一 tf.summary模組的簡介
在TensorFlow中,最常用的視覺化方法有三種途徑,分別為TensorFlow與OpenCv的混合程式設計、利用Matpltlib進行視覺化、利用TensorFlow自帶的視覺化工具TensorBoard進行視覺化。這三種方法,在前面部落格中都有過比較詳細的介紹。但是,TensorFlow中最重要的視覺化方法是通過tensorBoard、tf.summary和tf.summary.FileWriter這三個模組相互合作來完成的。
tf.summary模組的定義位於summary.py檔案中,該檔案中主要定義了在進行視覺化將要用到的各種函式,tf.summary包含的主要函式如下所示:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from google.protobuf import json_format as _json_format
from tensorflow.core.framework.summary_pb2 import Summary
from tensorflow.core.framework.summary_pb2 import SummaryDescription
from tensorflow.core.util.event_pb2 import Event
from tensorflow.core.util.event_pb2 import SessionLog
from tensorflow.core.util.event_pb2 import TaggedRunMetadata
from tensorflow.python.eager import context as _context
from tensorflow.python.framework import dtypes as _dtypes
from tensorflow.python.framework import ops as _ops
from tensorflow.python.ops import gen_logging_ops as _gen_logging_ops
from tensorflow.python.ops import summary_op_util as _summary_op_util
from tensorflow.python.ops.summary_ops import tensor_summary
from tensorflow.python.summary.text_summary import text_summary as text
from tensorflow.python.summary.writer.writer import FileWriter
from tensorflow.python.summary.writer.writer_cache import FileWriterCache
from tensorflow.python.util import compat as _compat
from tensorflow.python.util.all_util import remove_undocumented
from tensorflow.python.util.tf_export import tf_export
#========================================================================================================
#模組說明:
# tf.summary中包含的主要函式
#========================================================================================================
def scalar(name, tensor, collections=None, family=None)
def image(name, tensor, max_outputs=3, collections=None, family=None)
def histogram(name, values, collections=None, family=None)
def audio(name, tensor, sample_rate, max_outputs=3, collections=None,family=None)
def merge(inputs, collections=None, name=None)
def merge_all(key=_ops.GraphKeys.SUMMARIES, scope=None)
def get_summary_description(node_def)
二 tf.summary模組中常用函式的說明:
1 tf.summary.scalar函式的說明
#========================================================================================================
#函式原型:
# def scalar(name, tensor, collections=None, family=None)
#函式說明:
# [1]輸出一個含有標量值的Summary protocol buffer,這是一種能夠被tensorboard模組解析的【結構化資料格式】
# [2]用來顯示標量資訊
# [3]用來視覺化標量資訊
# [4]其實,tensorflow中的所有summmary操作都是對計算圖中的某個tensor產生的單個summary protocol buffer,而
# summary protocol buffer又是一種能夠被tensorboard解析並進行視覺化的結構化資料格式
# 雖然,上面的四種解釋可能比較正規,但是我感覺理解起來不太好,所以,我將tf.summary.scalar()函式的功能理解為:
# [1]將【計算圖】中的【標量資料】寫入TensorFlow中的【日誌檔案】,以便為將來tensorboard的視覺化做準備
#引數說明:
# [1]name :一個節點的名字,如下圖紅色矩形框所示
# [2]tensor:要視覺化的資料、張量
#主要用途:
# 一般在畫loss曲線和accuary曲線時會用到這個函式。
#=======================================================================================================
具體的使用方法如下所示:
#=======================================================================================================================
#函式說明:
# 生成【變數】的監控資訊,並將生成的監控資訊寫入【日誌檔案】
#引數說明:
# [1]var :需要【監控】和【記錄】執行狀態的【張量】
# [2]name:給出了視覺化結果中顯示的圖表名稱
#=======================================================================================================================
def variable_summaries(var,name):
with tf.name_scope('summaries'):
#【1】通過tf.summary.histogram()
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)
2 tf.summary.image函式的說明
#========================================================================================================
#函式原型:
# def image(name, tensor, max_outputs=3, collections=None, family=None)
#函式說明:
# [1]輸出一個包含影象的summary,這個影象是通過一個4維張量構建的,這個張量的四個維度如下所示:
# [batch_size,height, width, channels]
# [2]其中引數channels有三種取值:
# [1]1: `tensor` is interpreted as Grayscale,如果為1,那麼這個張量被解釋為灰度影象
# [2]3: `tensor` is interpreted as RGB,如果為3,那麼這個張量被解釋為RGB彩色影象
# [3]4: `tensor` is interpreted as Grayscale,如果為4,那麼這個張量被解釋為RGBA四通道影象
# [3]輸入給這個函式的所有影象必須規格一致(長,寬,通道,資料型別),並且資料型別必須為uint8,即所有的畫素值在
# [0,255]這個範圍
# 雖然,上面的三種解釋可能比較正規,但是我感覺理解起來不太好,所以,我將tf.summary.image()函式的功能理解為:
# [1]將【計算圖】中的【影象資料】寫入TensorFlow中的【日誌檔案】,以便為將來tensorboard的視覺化做準備
#
#引數說明:
# [1]name :一個節點的名字,如下圖紅色矩形框所示
# [2]tensor:要視覺化的影象資料,一個四維的張量,元素型別為uint8或者float32,維度為[batch_size, height,
# width, channels]
# [3]max_outputs:輸出的通道數量,可以結合下面的示例程式碼進行理解
#主要用途:
# 一般用在神經網路中影象的視覺化
#========================================================================================================
示例程式碼如下所示:
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 tf.summary.histogram函式的說明
#========================================================================================================
#函式原型:
# def histogram(name, values, collections=None, family=None)
#函式說明:
# [1]用來顯示直方圖資訊
# [2]新增一個直方圖的summary,它可以用於視覺化您的資料的分佈情況,關於TensorBoard中直方圖更加具體的資訊可以在
# 下面的連結https://www.tensorflow.org/programmers_guide/tensorboard_histograms中獲取
#
# 雖然,上面的兩種解釋可能比較正規,但是我感覺理解起來不太好,所以,我將tf.summary.histogram()函式的功能理解為:
# [1]將【計算圖】中的【資料的分佈/資料直方圖】寫入TensorFlow中的【日誌檔案】,以便為將來tensorboard的視覺化做準備
#引數說明:
# [1]name :一個節點的名字,如下圖紅色矩形框所示
# [2]values:要視覺化的資料,可以是任意形狀和大小的資料
#主要用途:
# 一般用來顯示訓練過程中變數的分佈情況
#========================================================================================================
示例程式碼如下所示:#=======================================================================================================================
#函式說明:
# 生成一層全連線層神經網路
#=======================================================================================================================
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
4 tf.summary.函式的說明
#========================================================================================================
#函式原型:
# def merge_all(key=_ops.GraphKeys.SUMMARIES, scope=None)
#函式說明:
# [1]將之前定義的所有summary整合在一起
# [2]和TensorFlow中的其他操作類似,tf.summary.scalar、tf.summary.histogram、tf.summary.image函式也是一個
# op,它們在定義的時候,也不會立即執行,需要通過sess.run來明確呼叫這些函式。因為,在一個程式中定義的寫日誌操作
# 比較多,如果一一呼叫,將會十分麻煩,所以Tensorflow提供了tf.summary.merge_all()函式將所有的summary整理在一
# 起。在TensorFlow程式執行的時候,只需要執行這一個操作就可以將程式碼中定義的所有【寫日誌操作】執行一次,從而將
# 所有的日誌寫入【日誌檔案】。
#
#引數說明:
# [1]key : 用於收集summaries的GraphKey,預設的為GraphKeys.SUMMARIES
# [2]scope:可選引數
#========================================================================================================
5 tf.summary.FileWriter類的說明
#========================================================================================================
#類定義原型:
# class FileWriter(SummaryToEventTransformer)
#類說明:
# [1]將Summary protocol buffers寫入磁碟檔案
# [2]FileWriter類提供了一種用於在給定目錄下建立事件檔案的機制,並且將summary資料寫入硬碟
#建構函式:
# def __init__(self,logdir,graph=None,max_queue=10,flush_secs=120,graph_def=None,filename_suffix=None):
#引數說明:
# [1]self : 類物件自身
# [2]logdir:用於儲存【日誌檔案】的目錄
# [3]graph : 將要儲存的計算圖
#應用示例:
# summary_writer = tf.summary.FileWriter(SUMMARY_DIR,sess.graph):建立一個FileWrite的類物件,並將計算圖
# 寫入檔案
#========================================================================================================
示例程式碼如下所示: 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()
6 add_summary函式的說明
#========================================================================================================
#函式原型:
# def add_summary(self, summary, global_step=None)
#函式說明:
# [1]該函式是tf.summary.FileWriter父類中的成員函式
# [2]將一個`Summary` protocol buffer新增到事件檔案,寫入事件檔案
#引數說明:
# [1]self : 類物件自身
# [2]summary:將要寫入的summary
# [3]graph : global_step,當前迭代的輪數,需要注意的是,如果沒有這個引數,那麼scalar的summary將會成為一條直線
#應用示例:
# summary_writer.add_summary(summary,i)
#========================================================================================================
相關文章
- 【Tensorflow_DL_Note15】TensorFlow視覺化學習2-用Matplotlib視覺化視覺化
- 【Tensorflow_DL_Note16】TensorFlow視覺化學習3_引數,準確率的視覺化視覺化
- 【Tensorflow_DL_Note14】TensorFlow視覺化學習1-Tensorflow與OpenCv混合程式設計視覺化OpenCV程式設計
- 【Tensorflow_DL_Note3】深度學習中的資料處理及其視覺化深度學習視覺化
- Django 視覺化Web展示 學習Django視覺化Web
- 【TensorFlow篇】--Tensorflow框架視覺化之Tensorboard框架視覺化ORB
- 「深度學習系列」CNN模型的視覺化深度學習CNN模型視覺化
- 視覺化學習:WebGL的基礎使用視覺化Web
- 視覺化學習的第一天:瞭解Matplotlib視覺化
- 資料視覺化學習資源視覺化
- 深度學習(視覺化卷積核)深度學習視覺化卷積
- 視覺學習(三)視覺
- 學習python視覺化,matplotlib庫學習,基本操作Python視覺化
- 詳解Docker容器視覺化監控中心搭建Docker視覺化
- 資料視覺化詳解+程式碼演練視覺化
- CNN超引數優化和視覺化技巧詳解CNN優化視覺化
- Echarts檢視視覺化-學習筆記(努力更新中)Echarts視覺化筆記
- Python資料視覺化---pygal模組Python視覺化
- 視覺化佈局模組開發分享視覺化
- Matlab學習-視覺化和程式設計Matlab視覺化程式設計
- 視覺化學習:WebGL實現縮放平移視覺化Web
- 【強化學習篇】--強化學習案例詳解一強化學習
- 學習 Tensorflow 的困境與解藥
- 「AI白身境」深度學習中的資料視覺化AI深度學習視覺化
- 視覺化學習:圖形系統中的顏色表示視覺化
- 視覺化學習:CSS transform與仿射變換視覺化CSSORM
- 視覺化學習:使用WebGL實現網格背景視覺化Web
- 視覺化學習 | 如何使用噪聲生成紋理視覺化
- 資料視覺化Seaborn從零開始學習教程(三) 資料分佈視覺化篇視覺化
- 視覺化醫學影像CT視覺化
- HTML5資料視覺化學習之路---eChart起步HTML視覺化
- tensorboard 視覺化的最詳細介紹ORB視覺化
- 詳解JavaScript模組化開發JavaScript
- MNIST資料集詳解及視覺化處理(pytorch)視覺化PyTorch
- NumPy 隨機資料分佈與 Seaborn 視覺化詳解隨機視覺化
- TensorFlow常量、變數和佔位符詳解(學習筆記)變數筆記
- 各種音視訊編解碼學習詳解
- 計算機視覺中的深度學習計算機視覺深度學習