摘要:代表圖中的一個節點,用于計算張量數據可以由節點構造器與產生。例如表示創建了一個類型為的,該接收和作為輸入,而產生作為輸出。是否能在該作用域內創建新對象由決定。
一.tensorboard簡介
tensorboard是tensorflow自帶的一個強大的可視化工具,也是一個web應用套件支持七種可視化包括 SCALARS(標量)、IMAGES(圖像)、AUDIO(音頻)、GRAPHS(數據流圖)、DISTRIBUTIONS(訓練數據分布圖)、HISOGRAMS(訓練過程中數據的柱狀圖)和EMBEDDINGS(展示詞向量的投影分布)
一.基礎知識Tensorflow的計算表現為數據流圖,因此tf.Graph類中包含了一系列表示計算的操作對象(tf.Operation),以及操作之間的流動的數據(tf.Tensor)。tf.Operation代表圖中的一個節點,用于計算張量數據可以由節點構造器(tf.add)與tf.Graph.creat_op()產生。tf.Tensor是操作輸出的符號句柄,不包含輸出的的值,而是提供tf.Session來計算這些值的方法,這樣就能構建一個數據流連接。例如c = tf.matmul(a, b)表示創建了一個類型為MatMul的Operation,該Operation接收Tensor a和Tensor b作為輸入,而產生Tensor c作為輸出。
在可視化的時候還需要給必要的節點添加摘要(summary),摘要會收集節點的數據,并且標記上第幾步時間戳等寫入事件文件(event file),tf.sunmmary.FileWriter類用于在目錄中創建事件文件,并且向摘要中添加摘要和事件。如train_writer.add_summary(summary,i)。
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
class tensorboard(object):
#用來生成核函數 def weight_variable(self,shape): weight=tf.truncated_normal(shape=shape,stddev=0.1) return tf.Variable(weight) #用來生成偏置項的分布 def bias_variable(self,shape): bias=tf.constant(0.0,dtype=tf.float32,shape=shape) return tf.Variable(bias)
初始化某個結構層,其中我們使用tf.name_scope來創建作用域,它和tf.variable_scope的區別在于tf.name_scope只能給op_name加前綴,tf.variable_scope不僅僅可以給op_name還能給variable_name加前綴同時簡要說明tf.Variable和tf.get_Variable的區別,簡而言之就是tf.Variable每次都直接新建一個變量,但是tf.get_Variable先檢查,如果有的話就直接返回該變量對象,否則創建對象。是否能在該作用域內創建新對象由tf.get_Variable決定。
再使用variable_summaries函數來創建該層的一些信息
def nn_layer(self,input_tensor,input_dim,output_dim,layer_name,act=tf.nn.relu): with tf.name_scope(layer_name): with tf.name_scope("weight"): weights=self.weight_variable([input_dim,output_dim]) self.variable_summaries(weights) with tf.name_scope("bias"): bias=self.weight_variable([output_dim]) self.variable_summaries(bias) with tf.name_scope("Wx_plus_b"): preactivate=tf.nn.bias_add(tf.matmul(input_tensor,weights),bias) #tf.summary是給必要的節點添加摘要,摘要會收集該節點的數據,在這個位置收集數據并 #且使用histogram繪制出來,效果如下圖 tf.summary.histogram("preactivate",preactivate) activations=act(preactivate,name="activation") tf.summary.histogram("activation",activations) return activations
接下來說明我們摘要應該包含的數據,即標量由均值、方差、最小值、最大值,同時繪制輸入的張量數據的圖分布
def variable_summaries(self,var): with tf.name_scope("sunmmaries"): mean=tf.reduce_mean(var) tf.summary.scalar("mean",mean) with tf.name_scope("stddev"): stddev=tf.sqrt(tf.reduce_mean(tf.square(var-mean))) tf.summary.scalar("stddev",stddev) tf.summary.scalar("max",tf.reduce_max(var)) tf.summary.scalar("min",tf.reduce_min(var)) tf.summary.histogram("histogram",var)
效果如下圖,雖說訓練存在問題,但是目標僅僅是為了畫圖
接下來是初始化函數,不做多講
def __init__(self,max_steps=500,learning_rate=0.01,drop_out=0.9,batch_size=256): self.max_steps=max_steps self.learning_rate=learning_rate self.drop_out=drop_out self.log_dir="mnist_with_summaries" self.batch_size=batch_size self.mnist=input_data.read_data_sets("MNIST_data/",one_hot=True,source_url="http://yann.lecun.com/exdb/mnist/")
以下定義了結構信息,定義了圖中的節點
def construct(self): with tf.name_scope("input"): self.x=tf.placeholder(dtype=tf.float32,shape=[self.batch_size,784],name="X_input") self.y_=tf.placeholder(dtype=tf.float32,shape=[self.batch_size,10],name="y_input") with tf.name_scope("input_shape"): image_shaped_input=tf.reshape(self.x,shape=[self.batch_size,28,28,1]) tf.summary.image("input",image_shaped_input,10) hidden1=self.nn_layer(self.x,784,500,"layer1") with tf.name_scope("drop_out"): self.keep_prob=tf.placeholder(dtype=tf.float32) tf.summary.scalar("dropout_keep_prob",self.keep_prob) dropped=tf.nn.dropout(hidden1,keep_prob=self.keep_prob) y=self.nn_layer(dropped,500,10,"layer2",act=tf.identity) with tf.name_scope("cross_entropy"): diff=tf.nn.softmax_cross_entropy_with_logits(logits=y,labels=self.y_) with tf.name_scope("total"): cross_entropy=tf.reduce_mean(diff) tf.summary.scalar("cross_entropy",cross_entropy) with tf.name_scope("train"): self.train_step=tf.train.AdamOptimizer(self.learning_rate).minimize(cross_entropy) with tf.name_scope("accuracy"): with tf.name_scope("correct_prediction"): correct_prediction=tf.equal(tf.argmax(y),tf.argmax(self.y_)) with tf.name_scope("accuracy"): self.accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) tf.summary.scalar("accuracy",self.accuracy)
上面的代碼定義了大部分的節點名稱,并且也添加了標量的摘要如accuracy等,accuracy的圖不再贅述,接下來就是在運行的過程中繪制剛剛的標量和圖表信息
#為了釋放TensorBoard所使用的事件文件(events file),所有的即時數據(在這里只有一個)都要在圖表構建階段合并至一個操作(op)中。 merged=tf.summary.merge_all() session=tf.Session() #用于將Summary寫入磁盤,需要制定存儲路徑logdir,如果傳遞了Graph對象,則在Graph Visualization會顯示Tensor Shape Information train_writer=tf.summary.FileWriter(self.log_dir+"/train",session.graph) test_writer=tf.summary.FileWriter(self.log_dir+"/test") init=tf.global_variables_initializer() session.run(init) saver=tf.train.Saver() for i in range(self.max_steps): if i%100==0: #繪制之前的所有的圖表以及標量信息 summary,acc=session.run([merged,self.accuracy],feed_dict=self.feed_dict(False)) test_writer.add_summary(summary,i) print("Accuracy at step %s: %s"%(i,acc)) else: if i==499: #定義本模型的運行選項,并不加限制并且操作元數據,為描述數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件記錄等功能。 run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) run_metadata=tf.RunMetadata() summary,_=session.run([merged,self.train_step],feed_dict=self.feed_dict(True),options=run_options,run_metadata=run_metadata) train_writer.add_run_metadata(run_metadata,"step%03d"%i) train_writer.add_summary(summary,i) print("Adding run metadata for",i) else: summary,_=session.run([merged,self.train_step],feed_dict=self.feed_dict(True)) train_writer.add_summary(summary,i) if i%99==0: print("at train step") train_writer.close() test_writer.close() def extract(self,x,y): sample_num=self.mnist.train.num_examples idx=np.random.randint(low=0,high=(sample_num-self.batch_size)) return x[idx:(idx+self.batch_size)],y[idx:(idx+self.batch_size)] def feed_dict(self,train): if train: xs,ys=self.mnist.train.next_batch(self.batch_size) k=self.drop_out else: xs,ys=self.extract(self.mnist.train.images,self.mnist.train.labels) k=1.0 return {self.x:xs,self.y_:ys,self.keep_prob:k}二.結論
Tensorboard作為對TensorFlow訓練過程的分析,可以對模型的問題作出更快的判斷,可以加快模型的優化,應當盡量多采用
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44507.html
摘要:什么是數據流圖使用符號計算圖,這與相似,不過與相比,更簡潔。這兩種元素在數據流圖中有自己各自的作用,其中節點代表對數據所做的運算或某種算子。 1.1 什么是數據流圖 TensorFlow使用符號計算圖,這與Theano相似,不過與Theano相比,TensorFlow 更簡潔。TensorFlow 的名字本身描述了它自身的執行原理: Tensor (張量)意味著N維數組,Flow (流...
摘要:為了進一步了解的邏輯,圖對和進行了展開分析。另外,在命名空間中還隱式聲明了控制依賴操作,這在章節控制流中相關說明。簡述是高效易用的開源庫,有效支持線性代數,矩陣和矢量運算,數值分析及其相關的算法。返回其中一塊給用戶,并將該內存塊標識為占用。 3. TF 代碼分析初步3.1 TF總體概述為了對TF有整體描述,本章節將選取TF白皮書[1]中的示例展開說明,如圖 3 1所示是一個簡單線性模型的TF...
摘要:準備環境阿里云容器服務目前已經上線,但是購買按量付費的計算型服務器需要申請工單開通。總結我們可以利用阿里云容器服務,輕松的搭建在云端搭建的環境,運行深度學習的實驗室,并且利用追蹤訓練效果。 摘要: 利用Jupyter開發TensorFLow也是許多數據科學家的首選,但是如何能夠快速從零搭建一套這樣的環境,并且配置GPU的使用,同時支持最新的TensorFLow版本, 對于數據科學家來說...
摘要:概覽概覽產品簡介什么是訓練服務交互式訓練分布式訓練分布式訓練簡介分布式訓練分布式訓練產品優勢產品更新記錄產品定價快速上手開始使用快速上手案例介紹環境準備創建鏡像倉庫 概覽產品簡介什么是AI訓練服務交互式訓練分布式訓練分布式訓練簡介TensorFlow分布式訓練MXNet分布式訓練產品優勢產品更新記錄產品定價快速上手開始使用UAI-Train快速上手-MNIST案例MNIST 介紹環境準備創建...
當我們構建一個深度學習模型時,了解模型的結構和參數是非常重要的。TensorFlow提供了一種可視化網絡的編程技術,它可以幫助我們更好地理解模型的結構和參數,從而更好地調整模型以獲得更好的性能。 TensorFlow提供了一個名為TensorBoard的工具,它可以可視化我們的模型。TensorBoard可以顯示訓練和驗證的損失曲線、模型的結構、參數分布等信息。在本文中,我們將介紹如何使用Ten...
閱讀 2242·2021-11-17 09:33
閱讀 2783·2021-11-12 10:36
閱讀 3406·2021-09-27 13:47
閱讀 894·2021-09-22 15:10
閱讀 3494·2021-09-09 11:51
閱讀 1399·2021-08-25 09:38
閱讀 2762·2019-08-30 15:55
閱讀 2613·2019-08-30 15:53