Chapter 2.0 TensorBoard 基本教程(GRAPHS,scale,histogram,image)

/*************************************************************

2017年7月3日 增加tensorboard的histogram的說明

**************************************************************/

因?yàn)榫W(wǎng)上找的tensorboard教程都是在比較復(fù)雜的網(wǎng)絡(luò)下應(yīng)用,而且把幾個(gè)部分都糅合在一起,對(duì)于初學(xué)者比較難看懂基本套路。所以本文分成4個(gè)部分:

例子 1:只生成 GRAPHS

例子 2:在 1 的基礎(chǔ)上生成 scale

例子 3:在 2 的基礎(chǔ)上生成 histogram

例子 4:生成 image輸入到tensorboard


本小節(jié)的例子是建立在一個(gè)最簡單的線性回歸問題上的: y=k*x

在預(yù)測值上加上高斯噪聲,預(yù)測k的真實(shí)值



這里高斯噪聲的方差很小,應(yīng)該很容易得到 k=2


建立TensorBoard中的graph:

? graph的優(yōu)點(diǎn)是很直觀的顯示每個(gè)計(jì)算節(jié)點(diǎn)之間的關(guān)系,這對(duì)理解一個(gè)網(wǎng)絡(luò)是很重要的。而要得到這個(gè)graph也很簡單。


1.將每一個(gè)節(jié)點(diǎn)包括在name_scope下

tf中輸入輸出可以看做node(節(jié)點(diǎn)),每一次運(yùn)算看做一個(gè)節(jié)點(diǎn),所以將每一個(gè)節(jié)點(diǎn)命名可以很方便的建立一個(gè)計(jì)算圖。tf.name_scope為限定命名空間,所有這個(gè)with下的節(jié)點(diǎn)會(huì)被自動(dòng)命名為輸入的名稱,同時(shí)注意到name_scope是可以嵌套的,這樣可以將很復(fù)雜的網(wǎng)絡(luò)分解成好幾個(gè)部分。

2.融合所有summery

實(shí)際上如果只是可視化Graph,不需要融合summary。但是一般都還需要記錄一些標(biāo)量,直方圖的信息,這時(shí)候就需要融合summary.

同時(shí)就好像init一樣,merge是類的方法,需要sess來運(yùn)行。運(yùn)行merge將得到所有你定義的輸出信息,然后將這些信息寫到文件里面去(第三步),就完成啦


3.定義一個(gè)FileWriter,用來存放各種數(shù)據(jù)(第一個(gè)參數(shù)是數(shù)據(jù)存放的地址),在writer的數(shù)據(jù)寫入完畢后關(guān)閉writer

#(1)定義一個(gè)writer,一般在開始訓(xùn)練前定義

writer=tf.summary.FileWriter('./mylog',sess.graph)

#這句指令定義了文件的輸出地址,同時(shí)也將計(jì)算圖 sess.graph加入了記錄器,這樣在TensorBoard的GRAPHS窗口就可以展示整個(gè)計(jì)算圖的可視化效果了


#(2)利用writer來寫入各種信息(但是這個(gè)例子用不到,所以只需要定義就好啦)

#下面m_是summary信息,i是epoch

writer.add_summary(m_,i)

.......

#(3)所有寫入完成后可以關(guān)閉文件

writer.close()

結(jié)果:

網(wǎng)絡(luò)的整體視圖如下,

每一個(gè)大graph里面有小的subgraph可以詳細(xì)查看.(因?yàn)榍短琢?次運(yùn)算,所以loss里面有3個(gè)node)


參數(shù)(標(biāo)量)的監(jiān)視(scale)

上面的例子中,有兩個(gè)標(biāo)量,分別是猜測的k值和loss值。

在一般的dl程序中,至少會(huì)有兩個(gè)標(biāo)量(loss 和accuracy)

加入標(biāo)量到tensorboard很簡單

1.將標(biāo)量加入summery

tf.summery.scale('name',your_scale)

2.得到summery里面的值,寫入文件里面,實(shí)際上

merge=tf.summary.merge_all()

執(zhí)行這個(gè)指令可以將所有的summerary都計(jì)算出來,然后得到這些數(shù)后寫進(jìn)文件里面

3.將summary的信息(上面的m_)寫入文件里面.

writer.add_summary()

效果


直方圖的監(jiān)視(histogram)

顯然上面的scale只能輸入的是標(biāo)量,那么假如你想要輸入的是高維的信息呢(比如某一隱藏層的輸出 N*D維度)

1.將目標(biāo)加入histogram中


2.運(yùn)行summary.merge_all()方法得到信息

3.寫入文件

效果



總結(jié)

實(shí)際上從上面的3個(gè)例子可以看出tensorboard的使用是很簡單的

1.定義各種命名空間,也就是將各個(gè)運(yùn)算節(jié)點(diǎn)用 name_scope包括,就可以統(tǒng)一命名,方便GRAPHS的展示

2.定義文件writer來寫入各種summary信息。注意writer并不是只能有一個(gè),可以定義兩個(gè),一個(gè)用來寫train的數(shù)據(jù),一個(gè)用來寫test的數(shù)據(jù)

3.將感興趣的量(標(biāo)量,多維向量)加入到summary中

4.在自己定義的時(shí)間點(diǎn)計(jì)算這些summary信息: sess.run(tf.summary.merge_all())有可能需要feed_dict傳遞一些輸入。

5.將得到的信息利用前面定義的writer寫入到文件里面

6.程序運(yùn)行完畢后,打開tensorboard就可以啦


輸出自己定制的image

下面展示在tb里面輸出image,也就是繪制的線性回歸圖。

因?yàn)橄胍@示的圖片是有matplotlib生成的,所以先定義一個(gè)函數(shù),其功能有:

生成圖片 -> 將圖片保存到內(nèi)存中 -> 將這段內(nèi)存?zhèn)鬟f出去


那么調(diào)用這個(gè)函數(shù)就能夠生成想要的png格式的圖片。

真正的將image嵌入到tensorboard里面的工作就可以開始了。

和scale,histogram一樣,image的步驟仍然是定義、運(yùn)算、寫入


效果展示:



histogram/distribution 的圖像怎么看

在tensorboard中經(jīng)常看到會(huì)把weight和biases放到histogram中觀察,但是每次看到這些圖都是一臉懵逼,完全不知道怎么解讀這些圖片,下面是我從stackoverflow?上找到的一種解答


上面的wight定義是均值為0,方差為1的服從正態(tài)分布的一組參數(shù)。從數(shù)學(xué)知識(shí)可以知道,正態(tài)分布絕大部分的值應(yīng)該都分布在離均值很近的地方,只有很少一部分才會(huì)離均值很遠(yuǎn)。所以上面的histogram應(yīng)該是反映下面這樣的正態(tài)分布的圖


由正態(tài)分布圖可知有(19.1+19.1=38.2%)的數(shù)會(huì)落在(-0.5,0.5)的區(qū)間,那么再看tb的圖,這個(gè)區(qū)間(-0.5,0.5)有比較淡的藍(lán)色,符合數(shù)學(xué)知識(shí)。

再從正態(tài)圖得到:大約有86.6%的值會(huì)落在(-1.5,1.5)區(qū)間內(nèi),從tb的圖(-1.5,1.5)這個(gè)區(qū)間的藍(lán)色最強(qiáng),說明有很大部分的值是在這個(gè)區(qū)間內(nèi)

所以從上面我們就能夠知道,tb的distribution 圖的顏色主要和值得分布有關(guān),假如有很大比例的數(shù)分布在某個(gè)區(qū)間,這個(gè)區(qū)間的色彩就會(huì)強(qiáng),假如很少比例的數(shù)在這個(gè)區(qū)間,這區(qū)間的色彩就越淡

下面是我的網(wǎng)絡(luò)中全連接層的權(quán)值distribution


histogram



可以看到這一權(quán)值很大比例是分布在0的附近,整體來說這部分值都很接近0。這樣就可以很容易的觀察到權(quán)值分布的信息,比如知道那一部分的權(quán)值已經(jīng)dead(很接近0)




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容