文档章节

小白学Tensorflow之TensorBoard

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:19
字数 1798
阅读 4
收藏 0
点赞 0
评论 0

TensorBoard 的可视化工具可以帮助你更加方便的理解、调试与优化 TensorFlow 程序。你可以使用 TensorBoard 来展示你的 TensorFlow 图像,绘制图像生成的定量指标图以及附加数据。

当 TensorBoard 设置完成后,它应该是这样子的:


TensorBoard 通过读取 TensorFlow 的时间文件来运行。TensorFlow 的时间文件包括了你会在 TensorFlow 运行中涉及到的主要数据。下面是 TensorBoard 中汇总数据(Summary data)的大体生命周期。

首先,创建你想汇总数据的 TensorFlow 图,然后再选择你想在哪个节点进行汇总(summary)操作。

比如,假设你正在训练一个卷积神经网络,用于识别 MNIST 标签。你可能希望记录学习速率(learning rate)的如何变化,以及目标函数如何变化。也就是说,记录一些单个的数值,零维的标量。我们可以通过向节点附加 scalar_summary 操作来分别输出学习速度和期望误差。然后你可以给每个 scalary_summary 分配一个有意义的 标签,比如 learning rateloss function ,如下代码所示:

with tf.name_scope("loss_function"):
  cost = tf.reduce_mean(tf.pow(y - pred, 2))
  tf.scalar_summary('loss_function', cost)

或者你还希望显示一个特殊层中激活的分布,或者梯度权重的分布,各层网络权重,偏置的分布等。可以通过分别附加histogram_summary 运算来手机权重变量和梯度输出。如下代码所示:

W = tf.Variable(tf.zeros([784, 10]), name = "weights")
b = tf.Variable(tf.zeros([10]), name = "bias")
w_hist = tf.histogram_summary("weights", W)
b_hist = tf.histogram_summary("biases", b)

在 TensorFlow 中,所有的操作只有当你执行,或者另一个操作依赖于它的输出时才会运行。我们刚才创建的这些节点(summary nodes)都围绕着你的图像:没有任何操作依赖于它们的结果。因此,为了生成汇总信息,我们需要运行所有这些节点。这样的手动工作是很乏味的,因此可以使用 tf.merge_all_summaries 来将他们合并为一个操作。

然后你可以执行合并命令,它会依据特点步骤将所有数据生成一个序列化的 Summary protobuf 对象。最后,为了阿静汇总数据写入磁盘,需要将汇总的 protobuf 对象传递给 tf.train.Summarywriter 。

SummaryWriter 的构造函数中包含了参数 logdir 。这个 logdir 非常重要,所有事件都会写到它所指的目录下。此外,SummaryWriter 中还包含了一个可选择的参数 GraphDef 。如果输入了该参数,那么 TensorBoard 也会显示你的图像。如下代码所示:

merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/mnist_logs", sess.graph_def)

现在已经修改了你的图,也有了 SummaryWriter ,现在就可以运行你的神经网络了!如果你愿意的话,你可以没执行一步然后就执行一次合并汇总,这样你会得到一大堆训练数据。这很有可能超过了你想要的数据量。你也可以每一百步执行一次合并汇总,后者如下面代码里示范的这样:

merged_summary_op = tf.merge_all_summaries()
summary_writer = tf.train.SummaryWriter('/tmp/mnist_logs', sess.graph)
total_step = 0
while training:
  total_step += 1
  session.run(training_op)
  if total_step % 100 == 0:
    summary_str = session.run(merged_summary_op)
    summary_writer.add_summary(summary_str, total_step)

现在已经准备好用 TensorBoard 来可视化这些数据了。

那么我们怎么启动 TensorBoard 呢?可以输入下面的指令来启动 TensorBoard :

python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory

这里的参数 logdir 指向 SummaryWriter 序列化数据的存储路径。如果 logdir 目录的子目录中包含另一次运行时的数据,那么 TensorBoard 会展示所有运行的数据。一旦 TensorBoard 开始运行,你可以通过在浏览器中输入 localhost:6006 来查看 TensorBoard 。

但如果你是通过 pip 安装了 Tensorflow,那么你可以通过执行更为简单的明亮来访问 TensorBoard ,如下:

tensorboard --logdir=/path/to/log-directory

进入 TensorBoard 的界面时,你会在右上角看到导航选项卡,每一个选项卡将展现一组可视化的序列化数据集 。对于你查看的每一个选项卡,如果 TensorBoard 中没有数据与这个选项卡相关的话,则会显示一条提示信息指示你如何序列化相关数据。

接下来,我们谈谈名称域(Name scoping)和节点(Node)。

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

import tensorflow as tf

with tf.name_scope('hidden') as scope:
  a = tf.constant(5, name='alpha')
  W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights')
  b = tf.Variable(tf.zeros([1]), name='biases')

结果是得到了下面是三个操作名:

  • hidden/alpha
  • hidden/weights
  • hidden/biases

默认地,三个操作名会折叠为一个节点并标注为 hidden 。其额外细节并没有丢失,你可以双击,或点击右上方橙色的 + 来展开节点,然后就会看到三个子节点 alphaweightsbiases了。

这有一个生动的例子,例中有一个更复杂的节点,节点处于其初始和展开状态。


通过名称域把节点分组来得到可读性高的图表很关键的。如果你在构建一个模型,名称域就可以用来控制可视化结果。你的名称域越好,可视性就越好。

上面的图像例子说明了可视化的另一方面, TensorFlow 图表有两种连接关系:数据依赖和控制依赖。数据依赖显示两个操作之间的tensor流程,用实心箭头指示,而控制依赖用点线表示。在已展开的视图(上面的右图)中,除了用点线连接的CheckNumericscontrol_dependency 之外,所有连接都是数据依赖的。

至此,你已经学完了基本的 TensorBoard ,而且可以读懂图的意思了。

实验代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 
import input_data


mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
sess = tf.InteractiveSession()

# create the model
# name -> the graph representation
x = tf.placeholder(tf.float32, [None, 784], name = "x-input")
W = tf.Variable(tf.zeros([784, 10]), name = "weights")
b = tf.Variable(tf.zeros([10]), name = "bias")

# use a name_scope to organize nodes in the graph visualizer
# tf.name_scope -> the graph representation
with tf.name_scope("Wx_b") as scope:
    y = tf.nn.softmax(tf.matmul(x, W) + b)

# add summary ops to collect data
# historam summary
w_hist = tf.histogram_summary("weights", W)
b_hist = tf.histogram_summary("biases", b)
y_hist = tf.histogram_summary("y", y)

# define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10], name = "y-input")

# more name scopes will clean up the graph representation
with tf.name_scope("xent") as scoep:
    cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
    ce_sum = tf.scalar_summary("cross entropy", cross_entropy)

with tf.name_scope("train") as scope:
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

with tf.name_scope("test") as scope:
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    accuracy_summary = tf.scalar_summary("accuracy", accuracy)

# merge all the summaries and write them out to /tmp/mnist_logs
merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/mnist_logs", sess.graph_def)
tf.initialize_all_variables().run()

# train the model, and feed in test data and reord summaries every 10 steps
for i in xrange(100):
    if i % 10 == 0:
        feed = {x: mnist.test.images, y_: mnist.test.labels}
        result = sess.run([merged, accuracy], feed_dict = feed)
        summary_str = result[0]
        acc = result[1]
        writer.add_summary(summary_str, i)
        print i, acc
    else:
        batch_xs, batch_ys = mnist.train.next_batch(100)
        feed = {x: batch_xs, y_: batch_ys}
        sess.run(train_step, feed_dict = feed)
print accuracy.eval({x: mnist.test.images, y_: mnist.test.labels})

TensorBoard 图如下:





Reference:

极客学院

本文转载自:http://www.jianshu.com/p/19bb60b52dad

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
anaconda3 安装tensorflow 报Cannot remove entries fro

今天要在ananconda3 下安装Keras & TensorFlow 结果第一个很顺利,但是第二个的时候就报错了 [root@worker01 bin]# ./pip3.6 install tensorflow Collecting tensorflow Using cached https:......

yuri_cto
06/02
0
0
关于Anaconda中使用TensorFlow环境下的Spyder,Tensorboard浏览器出现空白页的解决问题

以下说一下我自己的tensorboard出现空白页的解决方法 因为我使用的是TensorFlow环境下的Spyder,执行完代码之后,生成了相应的文件之后,按惯例,我们该去cmd里面执行命令行:tensorboard -...

sinat_38998284
05/16
0
0
斯坦福tensorflow教程(二) tensorflow相关运算

1.认识下TensorBoard TensorFlow不仅是一个软件库,而是一整套包括TensorFlow、TensorBoard、Tensor Serving在内的软件包。为了更大程度地利用TensorFlow,我们应该了解如何将它们串联起来应...

致Great
05/09
0
0
在阿里云Kubernetes容器服务上打造TensorFlow实验室

简介 TensorFLow是深度学习和机器学习最流行的开源框架,它最初是由Google研究团队开发的并致力于解决深度神经网络的机器学习研究,从2015年开源到现在得到了广泛的应用。特别是Tensorboard...

必嘫
04/20
0
0
深度学习框架大战正在进行,谁将夺取“深度学习工业标准”的荣耀?

本文最早发表于本人博客:博客 随着深度学习研究热潮的持续发酵,各种开源深度学习框架层出不穷,其中包括:Caffe、CNTK、MXNet、Neon、TensorFlow、Theano 和 Torch (著名开源深度学习框架 ...

algorithmdog
2016/03/06
0
0
Tensorboard显示问题

学习“莫烦”TensorFlow视频教程的时候执行 write = tf.train.SummaryWriter("/home/lucas/Downloads",sess.graph) Tensorboard的graph下面无显示。 查询到网易云课堂上有人问同样的问题,建...

espanol
06/29
0
0
TensorFlow——可视化工具TensorBoard的使用

1、TensorBoard简介 Tensorboard是Tensorflow官方推出了可视化工具,它可以通过TensorFlow程序运行过程中输出的日志文件可视化TensorFlow程序的运行状态。 TensorBoard 和 TensorFLow 程序跑...

飞天小橘子
05/05
0
0
Tensorflow-task(hse-aml/intro-to-dl,简单注释,答案,附图)

这是俄罗斯高等经济学院的系列课程第一门,Introduction to Advanced Machine Learning,第二周第一个编程作业。 这个作业一共两个任务,难易程度:容易。 1. 熟悉TensorFlow,计算RMS 2. 使...

s09094031
04/21
0
0
人人都会深度学习之Tensorflow基础快速入门

《Tensorflow基础快速入门》课程的目的是帮助广大的深度学习爱好者,逐层深入,步步精通当下最流行的深度学习框架Tensorflow。该课程包含Tensorflow运行原理,Tensor上面常见的操作,常见API...

liwei2000
07/05
0
0
如何使用 TensorFlow mobile 将 PyTorch 和 Keras 部署到移动设备

雷锋网(公众号:雷锋网)按:本文为雷锋字幕组编译的技术博客,原标题 Deploying PyTorch and Keras Models to Android with TensorFlow Mobile ,作者为 John Olafenwa 。 翻译 | 于志鹏 整理...

雷锋字幕组
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

rabbitmq学习记录(六)交换机Exchange-direct

实现功能:一条消息发送给多个消费者 交换机模式:direct 相比于之前的fanout模式,可以进一步的筛选获取消息的消费者。 fanout模式下,只要消费者监听的队列,已经与接收生产者消息的交换机...

人觉非常君
17分钟前
0
0
Java 之 枚举

Java 中声明的枚举类,均是 java.lang.Enum 类的子类,Enun 类中的常用方法有: name() 返回枚举对象名称 ordinal() 返回枚举对象下标 valueOf(Class enumType, String name) 转换枚举对象 ...

绝世武神
25分钟前
0
0
使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
41分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
今天
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
今天
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
今天
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0
多 SSH Key 实现同一台服务器部署多 Git 仓库

本文以以下需求为背景,介绍详细的做法: 需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用) root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 gi...

yeahlife
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部