• tensorflow基础【5】-tensorboard


    先学习几个英文单词

    summary  汇总,摘要

    scope    范围

    我这是很早以前的笔记,后来有了博客才发布的,有些内容比较老,懒得改了。 

    先说明总体流程

    暂时不管怎么编程,假设已经有了如下代码,可执行的。

    # 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)

     可视化效果,先感性认识一下

    可视化简要步骤

    1.运行该代码

      // 此时在log2中已经生成文件

    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)

    需要喂参数

  • 相关阅读:
    利用 .NET Framework 命令行工具
    和AI机器人Alice的一段聊天记录
    WINDOWS自启动程序的10大隐身之所
    开放式开发/开源项目TimeDog[C#WindowsApp]
    Microsoft月度中文速递
    新安装的VS2003出现了一个问题不能新建项目!
    实例构造器和类型构造器的一些比较
    C++ 模板里面的typename
    vim 折叠的用法
    Redis3:持久化
  • 原文地址:https://www.cnblogs.com/yanshw/p/10423254.html
Copyright © 2020-2023  润新知