1. 程式人生 > 實用技巧 >視覺化Tensorboard應用

視覺化Tensorboard應用

以上一篇簡單的線性方程梯度下降程式碼為例

-------------------------------------------------------------

第1步:收集變數

#收集損失tensor
tf.compat.v1.summary.scalar(name='losses',tensor=loss)
#收集高維度的變數引數
tf.compat.v1.summary.histogram(name='weight',values=weight)

第2步:合併變數寫入事件檔案

merged=tf.compat.v1.summary.merge_all()

第3步:執行程式,生成檔案

summary = sess.run(merged)  
filewriter.add_summary(summary, i)#注意這裡的filewriter為檔案事件。filewriter=tf.compat.v1.summary.FileWriter('./tmp/test', sess.graph)

第4步:執行Tensorboard命令

tensorboard --logdir="./Main/tmp/test/" #注意這裡用逗號來區別地址

第5步:檢視效果

 1 def myregression():
 2     #由於在tensofflow2.0以上的版本,eager execution 是預設開啟的。如果不加此語句,直接執行程式將會報錯
3 tf.compat.v1.disable_eager_execution() 4 ''' 5 自實現一個線性迴歸預測 6 :return: 7 ''' 8 #1.準備資料,x特徵值[100,1],y目標值[100] 9 x=tf.compat.v1.random_normal([100,1],mean=1.75,stddev=0.5,name='x_data') 10 #假設y的真實值為y=0.7x+0.8,a的值隨機給為0.7,b偏置的值隨機給0.8 11 #矩陣相系必須是二維的,故[[0.7]] y_true為訓練集資料 12
y_true=tf.matmul(x,[[0.7]])+0.8 13 14 #第二步:建立線性迴歸模型。確認了只有一個特徵,故只有一個權重,一個偏置 y= w x+b 15 #隨機給一個權重和偏置的值,讓他去計算損失,然後當前狀態下優化 16 #因為權重訓練的過程中,不斷變化,故初始化用的是variable.mean和stddev隨機給為0.0,1.0 17 weight=tf.Variable(tf.compat.v1.random_normal([1,1],mean=0.0,stddev=1.0,name='w')) 18 #偏置初始值為0.0,後面下降時不斷+1 19 bias=tf.Variable(0.0,name='b') 20 #預測的結果=x * weight +bias 21 y_predict=tf.matmul(x,weight)+bias 22 23 #3、建立損失波函式,均方誤差.--先求每個樣本的誤差的平方,然後將誤差平方進行求和之後求平均值。 即全部相減求平方之後再相加的總數再除以樣本數 24 #最後返回其損失 25 loss=tf.math.reduce_mean(tf.math.square(y_true-y_predict)) 26 #收集損失tensor 27 tf.compat.v1.summary.scalar(name='losses',tensor=loss) 28 #收集高維度的變數引數 29 tf.compat.v1.summary.histogram(name='weight',values=weight) 30 merged=tf.compat.v1.summary.merge_all() 31 #4、梯度下降優化損失 learning_rate隨機指定.最小化損失.返回op 32 train_op=tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss) 33 34 #定義一個初始化變數的op 35 init_op=tf.compat.v1.global_variables_initializer() 36 #通過會話執行程式 37 with tf.compat.v1.Session() as sess: 38 #初始化變數 39 sess.run(init_op) 40 #列印隨機最先初始化的權重和偏置 41 print('隨機初始化的引數權重為:%f,偏置為%f'%(weight.eval(),bias.eval()))#因為weigth和bias都為op,不能直接調出數值 42 43 #執行優化,由於不是一次效能優化,故要迴圈,假設訓練100次 44 #迴圈1000次後,發現已經靠近w--0.7,b==0.8 45 filewriter=tf.compat.v1.summary.FileWriter('./tmp/test', sess.graph) 46 for i in range(1010): 47 sess.run(train_op) 48 print('引數權重為:%f,偏置為%f' % (weight.eval(), bias.eval())) # 因為weigth和bias都為op,不能直接調出數值 49 # 執行merged op 50 summary = sess.run(merged) 51 filewriter.add_summary(summary, i) 52 53 return None