zoukankan      html  css  js  c++  java
  • TensorFlow框架(2)之TensorBoard详解

       为了更方便 TensorFlow 程序的理解、调试与优化,TensorFlow发布了一套叫做 TensorBoard 的可视化工具。你可以用 TensorBoard 来展现你的 TensorFlow 图像,绘制图像生成的定量指标图以及附加数据。

      TensorBoard工具通过读取TensorFlow产生的事件(events)文件来进行图像绘制,其中这个事件文件是在运行TensorFlow时产生的summary数据。简单地说,可以将TensorBoard的使用分为两步:数据序列化和启动TensorBoard。

    1. Quick Start

    1.1 序列化

      数据序列化就是将summary节点保存为TensorFlow的事件文件,即保存TensorFlow中产生的summary数据。保存TensorFlow事件文件通过调用tf.summary.FileWriter函数来实现。如下所示是一个程序的简单序列化。

    from __future__ import print_function

    import tensorflow as tf

    session = tf.Session()

    w = tf.Variable([.3], tf.float32,name="w")

    b = tf.Variable([-.3], tf.float32,name="b")

    x = tf.placeholder(tf.float32,name="x")

    linear = w * x + b

    train_writer = tf.summary.FileWriter('/tmp/mnist_logs', session.graph)

    init = tf.global_variables_initializer()

    session.run(init)

    print(session.run(linear, {x: [1, 2, 3, 4]}))

    当执行上述程序后,在'/tmp/mnist_logs'目录下会生成一个文件。

    PS:

        tf.summary.FileWriter函数必须在global_variables_initializer().run()函数之前调用,在重命名tensor对象之后调用。

    1.2 启动

      当对TensorFlow的计算图进行序列化为文件后,即可启动TensorBoard工具绘制图像。启动TensorBoard的方式也非常简单,只需在控制终端上执行"TensorBoard"命令,同时传递序列化文件的路径。如绘制上述程序的序列化文件,则可执行如下命令:

    tensorboard --logdir=/tmp/mnist_logs

      启动TensorBoard后,用户在浏览器中输入:http://localhost:6006/,即可查看已绘制的TensorFlow图像,在"GRAPHS"标签能够查看TensorFlow计算流图,如图 11所示。

    图 11

    2. Summary Data

    2.1 Operation

      如上所述,TensorBoard工具通过读取TensorFlow产生的事件(events)文件来进行图像绘制,而事件文件是在运行TensorFlow时产生的summary数据。这里的summary数据是由TensorBoard提供的Summary Operation生成的。

      如表 11所示,能够生成Summary Data的Operation有四个:

    表 11 summary operation

    Operation

    语义

    tf.summary.scalar

    产生标量(scalars)类型的summary data

    tf.summary.histogram

    产生直方图(histograms)类型的summary data

    tf.summary.image

    产生图片(images)类型的summary data

    tf.summary.audio

    产生音频(Audio)类型的summary data

    PS:

        上述四个函数分别产生的summary data会在TensorBoard图形中的相应标签中,如图 11所示的SCALARS、IMAGES、AUDIO和HISTOGRAMS,而GRAPHS是自动产生的。

    2.2 Tensor

      其实表 11中Operation生成的Summary Data也是一种Tensor对象,所以若没有使用Session的run方法执行它们,这些Tensor是不会产生任何Summary Data的。因此为了生成Summary Data,需要用户手动一个个生成,然而这种方法太过麻烦。所以TensorFlow提供一个将所有Summary Operation生成的Tensor集成为一个Tensor对象,用户只需通过Session.run函数执行这个Tensor对象,即可生成所有的Summary Data。该函数为:tf.summary.merge_all()。

      在执行这个集成Tensor对象后,会生成一个Summary protobuf对象,用户需要将这个对象传递给tf.summary.filewriter对象,这样所有Summary data就会序列化到事件文件中。

      如下示例是将tf.summary.scalar操作生成的Summary Data序列化为事件文件:

    import numpy as np

    import tensorflow as tf

    #Model parameters

    w = tf.Variable([.3], tf.float32)

    b = tf.Variable([-.3], tf.float32)

    #Model input and output

    x = tf.placeholder(tf.float32)

    linear_model = w * x + b

    y = tf.placeholder(tf.float32)

    #loss

    squared_deltas = tf.square(linear_model - y)

    loss = tf.reduce_sum(squared_deltas)

    #optimizer

    optimizer = tf.train.GradientDescentOptimizer(0.01)

    train = optimizer.minimize(loss)

    #1.保存需要序列化的常量

    tf.summary.scalar('loss', loss)

    with tf.name_scope('constant'):

    c = tf.constant(4.3,tf.float32)

    tf.summary.scalar('c', c)

    #training loop

    init = tf.global_variables_initializer()

    session = tf.Session()

    #2.集成所有Summary Operation

    merged = tf.summary.merge_all()

    train_writer = tf.summary.FileWriter('/tmp/mnist_logs', session.graph)

    session.run(init)

    for i in range(1000):

    session.run(train, {x:[1,2,3,4], y:[0, -1, -2, -3]})

    #3.执行集成的operation

    summary = session.run(merged, {x:[1,2,3,4], y:[0, -1, -2, -3]})

    #4.序列化到事件文件中

    train_writer.add_summary(summary,i)

    #evaluate training accuracy

    curr_w, curr_b, curr_loss = session.run([w,b,loss], {x:[1, 2, 3, 4], y:[0, -1, -2, -3]})

    print("w:%s b:%s loss:%s"%(curr_w,curr_b,curr_loss))

    图 12

    3. 命名空间

      典型的 TensorFlow 可以有数以千计的节点,如此多而难以一下全部看到,甚至无法使用标准图表工具来展示。为简单起见,TensorFlow提供一个将多个变量名划定范围的函数,并且可视化把该信息用于在图表中的节点上定义一个层级。该函数为:with tf.name_scope。默认情况下,只有顶层节点会显示。

      如下示例将x和w划定为hidden范围的命名空间内:

    import tensorflow as tf

    session = tf.Session()

    b = tf.Variable([-.3], tf.float32,name="b")

    with tf.name_scope('hidden'):

    x = tf.placeholder(tf.float32,name="x")

    w = tf.Variable([.3], tf.float32,name="w")

    linear = w * x + b

    train_writer = tf.summary.FileWriter('/tmp/mnist_logs', session.graph)

    init = tf.global_variables_initializer()

    session.run(init)

    print(session.run(linear, {x: [1, 2, 3, 4]}))

    图 21

    4. 参考文献

  • 相关阅读:
    临床是什么意思
    .NET编程 TripleDES加解密范例
    七个C#编程的小技巧
    什么是医技科室
    NT Service与桌面交互
    如何在全局程序集缓存 (GAC) 中安装 DLL 文件
    C# 获取机器码
    .NET编程 字节数组、数值和十六进制字符串的转换
    C#.Net的全局键盘钩子(Hook)技术
    VS2008安装"deffactory.dat"文件错误解决方法
  • 原文地址:https://www.cnblogs.com/huliangwen/p/7445838.html
Copyright © 2011-2022 走看看