tensorflow基礎【5】-tensorboard

先學習幾個英文單詞python

summary  彙總,摘要編程

scope    範圍瀏覽器

 

我這是很早之前的筆記,後來有了博客才發佈的,有些內容比較老,懶得改了。 網絡

 

先說明整體流程dom

暫時無論怎麼編程,假設已經有了以下代碼,可執行的。工具

# encoding:utf-8
import tensorflow as tf print('version:', tf.__version__) foo = tf.Variable(3, name='foo') bar = tf.Variable(2, name='bar') result = tf.add(foo, bar, name='add') # 初始化變量
init = tf.global_variables_initializer() # 啓動圖 (graph)
sess = tf.Session() sess.run(init) res = sess.run(result) print('result:', res) train_writer = tf.summary.FileWriter('log2', sess.graph)

 可視化效果,先感性認識一下學習

可視化簡要步驟spa

1.運行該代碼scala

  // 此時在log2中已經生成文件code

2.啓動可視化工具

  a. 找到tensorflow下的tensorboard.py文件,運行該文件,python tensorboard.py --logdir=...../log2/    注意這裏的路徑和代碼裏的路徑要一致 (這是老版本的)

  b. 直接運行 tensorboard --host=10.10.101.2 --port=6099 --logdir="my_graph"  

    // tensorBoard 不須要額外的安裝,在tensorflow安裝完成時,TensorBoard會被自動安裝

    // port host 無關緊要

    // 目錄不帶引號

3. 在瀏覽器中 訪問 localhost:6006,點擊graphs,便可看到

4. 注意每運行一次代碼就要重啓這個工具

 

詳細說明

1. 數據序列化

tf可視化其實是把運算數據序列化到本地,而後用瀏覽器加載這些數據

這個本地文件叫 ‘事件文件’,經過tensorboard來讀取

weights = tf.Variable(tf.random_normal([3,2]), name='w') sess = tf.Session() writer = tf.summary.FileWriter('log2', sess.graph)    # 序列化

SummaryWriter 兩個參數,第一個參數是序列化的地址,第二個參數可選,若是輸入了該參數,tensorboard就會顯示圖像。

 

2. 名字的做用域 scope

tf.name_scope() 會建立一個做用域,該做用域下的變量名都會加上該做用域的名字

with tf.name_scope('test'): weights = tf.Variable(tf.random_normal([3,2]), name='w') sess = tf.Session() writer = tf.summary.FileWriter('log2', sess.graph)

以上兩步基本上就能夠實現畫圖了

可是可視化不止畫圖

 

3.可視化內容

1. events 就是那些變量, 序列化後存到本地

  // 經過向節點附加 scalar_summary 操做來輸出變量

2. graphs 就是圖,圖裏只有網絡結構,沒有數據

3. histograms 是直方圖,把數據畫成直方圖

  // 經過向節點附加 histogram_summary 操做來輸出直方圖

 

這其實都是先存數據,再可視化,因此也是須要在繪畫中執行,那麼若是你想輸出不少數據,就須要在會話中挨個輸出,很麻煩

tf 提供了一個合併操做,就是將這些輸出合併,在會話中一次性所有輸出,接口 tf.merge_all_summaries()

 

# coding:utf-8
import tensorflow as tf import numpy as np # 此代碼僅用於可視化
 x_data = np.random.rand(100).astype("float32") with tf.name_scope('y_data'): y_data = x_data * 2.5 + 0.8
    # tf.histogram_summary("method_demo"+"/y_data",y_data)
    tf.summary.histogram("method_demo"+"/y_data",y_data) with tf.name_scope('W'): W = tf.Variable(tf.random_uniform([1], -200.0, 200.0)) tf.summary.histogram("method_demo"+"/W",W) with tf.name_scope('b'): b = tf.Variable(tf.zeros([1])) tf.summary.histogram("method_demo"+"/b",b) with tf.name_scope('y'): y = W * x_data + b tf.summary.histogram("method_demo"+"/y",y) # 最小化均方
with tf.name_scope('loss'): loss = tf.reduce_mean(tf.square(y - y_data)) tf.summary.histogram("method_demo"+"/loss",loss) tf.summary.scalar("method_demo222"+'loss',loss) optimizer = tf.train.GradientDescentOptimizer(0.7) with tf.name_scope('train'): train = optimizer.minimize(loss) init = tf.global_variables_initializer() sess = tf.Session() #合併到Summary中
merged = tf.summary.merge_all() #選定可視化存儲目錄
writer = tf.summary.FileWriter('log2',sess.graph) sess.run(init) # 開始計算
for step in range(500): sess.run(train) # tf.histogram_summary('method_demo'+'/train',train)
    if step % 5 == 0: print(step, "W:",sess.run(W),"b:", sess.run(b)) result = sess.run(merged)           #merged也是須要run的
        writer.add_summary(result,step)     #result是summary類型 (result 縱座標 step 橫座標)

 

運行 tensorboard,便可在瀏覽器訪問

 

異常記錄

1. InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'input/input_y' with dtype float and shape [100,1]

這個問題我查了很久,各類回答都有,都驗證無效,解決方案見代碼

# 如下皆可
    merged = tf.summary.merge_all() # merged = tf.summary.merge([loss_scalar])
 writer = tf.summary.FileWriter('logs', sess.graph) sess.run(init) for i in range(1000):
        loss2, _ = sess.run([loss, optimizer], feed_dict={input_x:x[:, np.newaxis], input_y:y[:, np.newaxis]}) # result = sess.run(merged) # 這樣寫報錯
        # InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'input/input_y' with dtype float and shape [100,1]
        result = sess.run(merged, feed_dict={input_x:x[:, np.newaxis], input_y:y[:, np.newaxis]}) writer.add_summary(result, i)

須要喂參數

相關文章
相關標籤/搜索