先學習幾個英文單詞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)
須要喂參數