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)

须要喂参数

相关文章
相关标签/搜索