作者:清新的淡淡茶绿 | 来源:互联网 | 2023-10-10 13:15
前期准备Tensorflow(Mac老司机踩坑记录:在Mac上安装Tensorflow的注意点–知乎专栏)一点可以跑的TF代码(https:gist.github.commosho
前期准备
- Tensorflow(Mac老司机踩坑记录:在Mac上安装Tensorflow的注意点 – 知乎专栏)
- 一点可以跑的TF代码(https://gist.github.com/moshoujingli/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简化显示,