TensorFlow深度學習筆記 Tensorboard入門

轉載請注明作者:夢里風林
Github工程地址:https://github.com/ahangchen/GDLnotes
歡迎star位谋,有問題可以到Issue區(qū)討論
官方教程:
https://www.tensorflow.org/versions/master/how_tos/graph_viz/index.html

TensorFlow自帶的一個強大的可視化工具

功能

這是TensorFlow在MNIST實驗數據上得到Tensorboard結果

  • Event: 展示訓練過程中的統(tǒng)計數據(最值山析,均值等)變化情況
  • Image: 展示訓練過程中記錄的圖像
  • Audio: 展示訓練過程中記錄的音頻
  • Histogram: 展示訓練過程中記錄的數據的分布圖

原理

  • 在運行過程中,記錄結構化的數據
  • 運行一個本地服務器掏父,監(jiān)聽6006端口
  • 請求時笋轨,分析記錄的數據,繪制

實現

在構建graph的過程中赊淑,記錄你想要追蹤的Tensor

with tf.name_scope('output_act'):
    hidden = tf.nn.relu6(tf.matmul(reshape, output_weights[0]) + output_biases)
    tf.histogram_summary('output_act', hidden)

其中爵政,

  • histogram_summary用于生成分布圖,也可以用scalar_summary記錄存數值
  • 使用scalar_summary的時候陶缺,tag和tensor的shape要一致
  • name_scope可以不寫钾挟,但是當你需要在Graph中體現tensor之間的包含關系時,就要寫了饱岸,像下面這樣:
with tf.name_scope('input_cnn_filter'):
    with tf.name_scope('input_weight'):
        input_weights = tf.Variable(tf.truncated_normal(
            [patch_size, patch_size, num_channels, depth], stddev=0.1), name='input_weight')
        variable_summaries(input_weights, 'input_cnn_filter/input_weight')
    with tf.name_scope('input_biases'):
        input_biases = tf.Variable(tf.zeros([depth]), name='input_biases')
        variable_summaries(input_weights, 'input_cnn_filter/input_biases')
  • 在Graph中會體現為一個input_cnn_filter掺出,可以點開徽千,里面有weight和biases
  • 用summary系列函數記錄后,Tensorboard會根據graph中的依賴關系在Graph標簽中展示對應的圖結構
  • 官網封裝了一個函數汤锨,可以調用來記錄很多跟某個Tensor相關的數據:
def variable_summaries(var, name):
    """Attach a lot of summaries to a Tensor."""
    with tf.name_scope('summaries'):
        mean = tf.reduce_mean(var)
        tf.scalar_summary('mean/' + name, mean)
        with tf.name_scope('stddev'):
            stddev = tf.sqrt(tf.reduce_sum(tf.square(var - mean)))
        tf.scalar_summary('sttdev/' + name, stddev)
        tf.scalar_summary('max/' + name, tf.reduce_max(var))
        tf.scalar_summary('min/' + name, tf.reduce_min(var))
        tf.histogram_summary(name, var)
  • 只有這樣記錄國max和min的Tensor才會出現在Event里面
  • Graph的最后要寫一句這個双抽,給session回調
merged = tf.merge_all_summaries()

Session 中調用

  • 構造兩個writer,分別在train和valid的時候寫數據:
train_writer = tf.train.SummaryWriter(summary_dir + '/train',
                                              session.graph)
valid_writer = tf.train.SummaryWriter(summary_dir + '/valid')
  • 這里的summary_dir存放了運行過程中記錄的數據闲礼,等下啟動服務器要用到
  • 構造run_option和run_meta牍汹,在每個step運行session時進行設置:
summary, _, l, predictions = 
    session.run([merged, optimizer, loss, train_prediction], options=run_options, feed_dict=feed_dict)
  • 注意要把merged拿回來,并且設置options
  • 在每次訓練時位仁,記一次:
train_writer.add_summary(summary, step)
  • 在每次驗證時,記一次:
valid_writer.add_summary(summary, step)
  • 達到一定訓練次數后方椎,記一次meta做一下標記
train_writer.add_run_metadata(run_metadata, 'step%03d' % step)

查看可視化結果

  • 啟動TensorBoard服務器:
python安裝路徑/python TensorFlow安裝路徑/tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory

注意這個python必須是安裝了TensorFlow的python聂抢,tensorboard.py必須制定路徑才能被python找到,logdir必須是前面創(chuàng)建兩個writer時使用的路徑

比如我的是:

/home/cwh/anaconda2/envs/tensorflow/bin/python /home/cwh/anaconda2/envs/tensorflow/lib/python2.7/site-packages/tensorflow/tensorboard/tensorboard.py --logdir=~/coding/python/GDLnotes/src/convnet/summary

使用python

  • 然后在瀏覽器輸入 http://127.0.0.1:6006 就可以訪問到tensorboard的結果

強迫癥踩坑后記

  • 之前我的cnn代碼里有valid_prediction棠众,所以畫出來的graph有兩條分支琳疏,不太清晰,所以只留了train一個分支

修改前:

多分支graph

修改后:

單分支graph
  • 多用with闸拿,進行包裹空盼,這樣才好看,正如官網說的新荤,你的summary代碼決定了你的圖結構
  • 不是所有的tensor都有必要記錄揽趾,但是Variable和placeholder最好都用summary記錄一下,也是為了好看
  • 由于有了gradient的計算苛骨,所以與gradient計算相關的都會被拎出來篱瞎,下次試一下用其他optimizer

我的CNN TensorBoard代碼:cnn_board.py

參考資料

覺得我的文章對您有幫助的話,不妨點個star痒芝?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末俐筋,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子严衬,更是在濱河造成了極大的恐慌澄者,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件请琳,死亡現場離奇詭異粱挡,居然都是意外死亡,警方通過查閱死者的電腦和手機俄精,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門抱怔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘀倒,你說我怎么就攤上這事屈留【直” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵灌危,是天一觀的道長康二。 經常有香客問我,道長勇蝙,這世上最難降的妖魔是什么沫勿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮味混,結果婚禮上产雹,老公的妹妹穿的比我還像新娘。我一直安慰自己翁锡,他們只是感情好蔓挖,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馆衔,像睡著了一般瘟判。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上角溃,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天拷获,我揣著相機與錄音,去河邊找鬼减细。 笑死匆瓜,一個胖子當著我的面吹牛,可吹牛的內容都是我干的未蝌。 我是一名探鬼主播陕壹,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼树埠!你這毒婦竟也來了糠馆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤怎憋,失蹤者是張志新(化名)和其女友劉穎又碌,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體绊袋,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡毕匀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了癌别。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皂岔。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖展姐,靈堂內的尸體忽然破棺而出躁垛,到底是詐尸還是另有隱情剖毯,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布教馆,位于F島的核電站逊谋,受9級特大地震影響,放射性物質發(fā)生泄漏土铺。R本人自食惡果不足惜胶滋,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悲敷。 院中可真熱鬧究恤,春花似錦、人聲如沸后德。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽探遵。三九已至窟赏,卻和暖如春妓柜,著一層夾襖步出監(jiān)牢的瞬間箱季,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工棍掐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藏雏,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓作煌,卻偏偏與公主長得像掘殴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粟誓,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容