初识Tensorboard

1.什么是Tensorboard?

  PPT设计原则中有这样一条,叫“文不如表,表不如图”,可见图表在表达中更为直观、明确。程序设计中也是一样,我们经常用图表来描述程序的结构和流程,本文所述的Tensorboard就是Tensorflow提供的一款强大的可视化工具,可以借助图表更方便地进行Tensorflow程序的理解、调试和优化。

     

  左面的数据流图cool吗?它是Tensorflow官网上给出的demo,下面,本文就结合一个具体的例子,介绍下Tensorboard的基本使用。

2. 如何使用Tensorboard?

  Tensorboard的使用可大体归结为如下几步:

  1) 在构建graph的过程中,记录你想要追踪的Tensor

  2) Session会话运行上一步骤中的记录

  3) 查看可视化效果

  那么如何具体操作呢?先走一波示例代码,一个用三层神经网络实现回归问题的小例子

 1 import tensorflow as tf
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4
 5 def add_layer(inputs, in_size, out_size, n_layer, activation_function = None):
 6     # add one more layer and return the output of this layer
 7     layer_name = ‘layer%s‘ % n_layer
 8     with tf.name_scope(‘layer‘):
 9         with tf.name_scope(‘weights‘):
10             Weights = tf.Variable(tf.random_normal([in_size, out_size]), name = ‘W‘)
11             tf.summary.histogram(layer_name + ‘/weights‘, Weights)
12         with tf.name_scope(‘biases‘):
13             biases = tf.Variable(tf.zeros([1,out_size]) + 0.1, name = ‘b‘)
14             tf.summary.histogram(layer_name + ‘/biases‘, biases)
15         with tf.name_scope(‘Wx_plus_b‘):
16             Wx_plus_b = tf.add(tf.matmul(inputs, Weights), biases, name = ‘Wpb‘)
17         if activation_function is None:
18             outputs = Wx_plus_b
19         else:
20             outputs = activation_function(Wx_plus_b)
21         tf.summary.histogram(layer_name + ‘/outputs‘, outputs)
22         return outputs
23
24 #define placeholder for inputs
25 with tf.name_scope(‘inputs‘):
26     xs = tf.placeholder(tf.float32, [None, 1], name = ‘x_input‘)
27     ys = tf.placeholder(tf.float32, [None, 1], name = ‘y_input‘)
28
29 # make up some real data
30 x_data = np.linspace(-1.0, 1.0, 300, dtype = np.float32)[:,np.newaxis]
31 noise = np.random.normal(0.0, 0.05, x_data.shape)
32 y_data = np.square(x_data) + 0.5 + noise
33
34 # add hidden layer and output layer
35 l1 = add_layer(xs, 1, 10, n_layer = 1, activation_function = tf.nn.relu)
36 prediction = add_layer(l1, 10, 1, n_layer = 2, activation_function = None)
37
38 # the error between prediction and real data
39 with tf.name_scope(‘loss‘):
40     loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices = [1]), name = ‘L‘)
41     tf.summary.scalar(‘loss‘, loss)
42 with tf.name_scope(‘train‘):
43     train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
44
45 init = tf.initialize_all_variables()
46 with tf.Session() as sess:
47     sess.run(init)
48     fig = plt.figure()
49     ax = fig.add_subplot(1,1,1)
50     ax.scatter(x_data, y_data)
51     plt.show(block = False)
52     merged =tf.summary.merge_all()
53     writer = tf.summary.FileWriter(‘/tmp/tensorlogs/ex5‘, sess.graph)
54     for i in range(1000):
55         sess.run(train_step, feed_dict = {xs : x_data, ys : y_data})
56         if i % 50 == 0:
57             # print(i, sess.run(loss, feed_dict = {xs : x_data, ys : y_data}))
58             try:
59                 ax.lines.remove(lines[0])
60             except Exception:
61                 pass
62             result, prediction_value = sess.run([merged, prediction], feed_dict = {xs : x_data, ys : y_data})
63             lines = ax.plot(x_data, prediction_value, ‘r-‘, lw = 5)
64             plt.pause(0.1)
65             writer.add_summary(result, i)

  下面具体分解上述的3个步骤

  1) 在上述示例中用了tf.summary.histogram()和tf.summary.scalar()记录要追踪的Tensor,前者可汇总和记录标量数据,如41行的loss;后者可汇总和记录变量为直方图,如11行的Weights。此外,tf.summary还可汇总记录图片(images),音频(Audio)等内容。

  2) 在Session中运行之前,要将上述所有汇总记录做一个合并,以便统一运行,如52行的merged所示,还要指定运行后存放数据记录的日志文件的位置,如53行的writer所示。接下来,就可以通过运行获取数据记录了,如62行的result所示,这里为了简洁,将result和prediction_value放在了一起运行,也可以拆成两行执行。程序要进行多次训练,如54行的for所示,每隔50次记录下追踪数据,如56行if所示,每次记录通过writer.add_summary()添加到日志文件中。

  3) 程序运行结束后,打开终端,输入tensorboard --logdir=‘path‘,其中的path为指定的日志文件存放路径,如53行‘/tmp/tensorlogs/ex5‘,运行后会看到下图所示

      

  在浏览器的地址栏中输入上图中所示的地址http://David:6006,就会看到如下图所示的tensorboard图表:

  graph:  程序图的结构

  

  scalars: 损失函数的值随着训练次数的增加逐步下降

  

  distributions: 隐藏层和输出层参数的分布图

  

  histograms: 隐藏层和输出层参数的直方图

  

3. 总结

  tensorboard的使用对于程序的理解、分析和优化都很有帮助,本文结合一个小的程序例子介绍了tensorboard的基本使用,更多内容可参看官方文档中关于Mnist数据集的代码实例。本文的实验环境为ubuntu16.04+tensorflow1.1。

时间: 2024-10-06 05:24:37

初识Tensorboard的相关文章

通俗易懂之Tensorflow summary类 & 初识tensorboard

前面学习的cifar10项目虽小,但却五脏俱全.全面理解该项目非常有利于进一步的学习和提高,也是走向更大型项目的必由之路.因此,summary依然要从cifar10项目说起,通俗易懂的理解并运用summary是本篇博客的关键. 先不管三七二十一,列出cifar10中定义模型和训练模型中的summary的代码: # Display the training images in the visualizer. tf.summary.image('images', images) def _activ

人工智能初识

人工智能 0.人工智能初识 0.1:课前准备 0.2:课程主要内容 0.3:知识点 0.4:TensorFlow的介绍 0.5:课程需要用到的软件及其安装 1.人工智能.机器学习.深度学习的定义 1.1:定义和分类 1.2:过拟合问题 1.3:RNN递归神经网络 2.TensorFlow的使用 2.1:创建一个简单的helloword显示 2.2:TensorFlow的基础模型 2.3:可视化利器TensorBoard 0. 人工智能初识 目前人工智能越来越火,比如说AlphaGo打败了李世石.

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

Tensorboard显示问题

学习"莫烦"TensorFlow视频教程的时候执行 write = tf.train.SummaryWriter("/home/lucas/Downloads",sess.graph) Tensorboard的graph下面无显示. 查询到网易云课堂上有人问同样的问题,建议是升级TensorFlow版本 执行sudo pip install --upgrade tensorflow 悲剧的是新版本下面没有SummaryWriter这个命令 又百度一下将tf.trai

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>