使用Tensorflow時的爽物之Tensorboard
前期準備
Tensorflow(Mac老司機踩坑記錄:在Mac上安裝Tensorflow的注意點 - 知乎專欄)
一點可以跑的TF程式碼(
https://
gist。github。com/moshouj
ingli/384b8b4e624d4a846fc26c8e5076a9ca
)
目的
使用Tensorflow自帶的工具進行權重分佈檢視,網路連結展示,loss隨迭代變化曲線。
使用
文章開頭提到的程式碼執行結束後,執行
tensorboard ——logdir=‘。/graph’
得到幾個視覺化頁面的截圖
顯示網路圖
選擇一個點進去可以看到細節
顯示權重分佈
三維顯示
顯示loss變化
用法
老版本的Tensorboard系列API是以tf。xxx_summary這種方法定義的,在1。0版本釋出後,summary被定義為operation的一種,因此呼叫變為:
http://
tf。summary。xxx
, 例如原先的tf。scalar_summary()介面現在為tf。summary。scalar()。
Tensorboard本質上是把執行中資訊儲存在一個資料夾下,然後用web方式開啟進行展示。所以一般的使用方法如下:
def
graphDef
():
## some other work
## 把一些ops整合到一個name scope下,最後生成的圖比較清楚
with
tf
。
name_scope
(
“layer_out”
):
w_o
=
init_weights
([
64
,
2
],
“w_o”
)
b_o
=
init_weights
([
2
],
“b_o”
)
py_x
=
tf
。
nn
。
softmax
(
tf
。
matmul
(
ho
,
w_o
)
+
b_o
)
## 定義圖的時候儲存一些中間結果
tf
。
summary
。
histogram
(
‘h1/weights’
,
w_2
)
tf
。
summary
。
scalar
(
‘loss’
,
cost
)
## summary 也是個op 所以也需要run
writer
=
tf
。
summary
。
FileWriter
(
‘。/graph’
,
sess
。
graph
)
merged
=
tf
。
summary
。
merge_all
()
## 合併定義圖時的記錄操作,並計算
for
i
in
range
(
step
):
## some other work
result
=
sess
。
run
(
merged
,
feed_dict
=
{
X
:
batchX
,
Y
:
batchY
})
## 把計算結果和step繫結(用來畫圖)
writer
。
add_summary
(
result
,
i
)
writer
。
close
()
常用的幾個API用法:
# 記錄一個tensor,之後產出這個tensor中元素的直方圖和分佈隨迭代次數i之間的關係,支援二級名稱
tf
。
summary
。
histogram
(
‘name/sub_name’
,
weight_tensor
)
# 記錄一個標量,之後產出這個標量和迭代次數i之間關係的曲線圖
tf
。
summary
。
scalar
(
‘name/sub_name’
,
scalar_val
)
# 指定輸出資料夾路徑以及對應的計算圖,之後產出此計算圖的圖形化展示
writer
=
tf
。
summary
。
FileWriter
(
‘。/graph’
,
sess
。
graph
)
# 定例搞法,一般在一個迴圈裡操作,i是需要把上面標量和分佈去繫結的迭代次數
merged
=
tf
。
summary
。
merge_all
()
result
=
sess
。
run
(
merged
)
writer
。
add_summary
(
result
,
i
)
總結
用Tensorflow搞了個大新聞之後可以考慮用graph來視覺化計算圖和中間關鍵值的變化。
如果發現有一些層連結的關係比較噁心,可以考慮用name_scope簡化顯示,