Tensorflow 自带可视化Tensorboard使用方法(附项目代码)


Posted in Python onFebruary 10, 2018

Tensorboard:

如何更直观的观察数据在神经网络中的变化,或是已经构建的神经网络的结构。上一篇文章说到,可以使用matplotlib第三方可视化,来进行一定程度上的可视化。然而Tensorflow也自带了可视化模块Tensorboard,并且能更直观的看见整个神经网络的结构。

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

上面的结构图甚至可以展开,变成:

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

使用:

结构图:

with tensorflow .name_scope(layer_name):

直接使用以上代码生成一个带可展开符号的一个域,并且支持嵌套操作:

with tf.name_scope(layer_name): 
  with tf.name_scope('weights'):

节点一般是变量或常量,需要加一个“name=‘'”参数,才会展示和命名,如:

with tf.name_scope('weights'): 
  Weights = tf.Variable(tf.random_normal([in_size,out_size]))

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

结构图符号及意义:

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

变量:

变量则可使用Tensorflow.histogram_summary()方法:

tf.histogram_summary(layer_name+"/weights",Weights) #name命名,Weights赋值

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

常量:

常量则可使用Tensorflow.scalar_summary()方法:

tf.scalar_summary('loss',loss) #命名和赋值

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

展示:

最后需要整合和存储SummaryWriter:

#合并到Summary中 
merged = tf.merge_all_summaries() 
#选定可视化存储目录 
writer = tf.train.SummaryWriter("/目录",sess.graph)

merged也是需要run的,因此还需要:

result = sess.run(merged) #merged也是需要run的 
  writer.add_summary(result,i)

执行:

运行后,会在相应的目录里生成一个文件,执行:

tensorboard --logdir="/目录"

会给出一段网址:

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

浏览器中打开这个网址即可,因为有兼容问题,firefox并不能很好的兼容,建议使用Chrome。

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

常量在Event中,结构图在Graphs中,变量在最后两个Tag中。

附项目代码:

项目承接自上一篇文章(已更新至最新Tensorflow版本API r1.2):

import tensorflow as tf  
import numpy as np  
  
def add_layer(inputs,in_size,out_size,n_layer,activation_function=None): #activation_function=None线性函数  
  layer_name="layer%s" % n_layer  
  with tf.name_scope(layer_name):  
    with tf.name_scope('weights'):  
      Weights = tf.Variable(tf.random_normal([in_size,out_size])) #Weight中都是随机变量  
      tf.summary.histogram(layer_name+"/weights",Weights) #可视化观看变量  
    with tf.name_scope('biases'):  
      biases = tf.Variable(tf.zeros([1,out_size])+0.1) #biases推荐初始值不为0  
      tf.summary.histogram(layer_name+"/biases",biases) #可视化观看变量  
    with tf.name_scope('Wx_plus_b'):  
      Wx_plus_b = tf.matmul(inputs,Weights)+biases #inputs*Weight+biases  
      tf.summary.histogram(layer_name+"/Wx_plus_b",Wx_plus_b) #可视化观看变量  
    if activation_function is None:  
      outputs = Wx_plus_b  
    else:  
      outputs = activation_function(Wx_plus_b)  
    tf.summary.histogram(layer_name+"/outputs",outputs) #可视化观看变量  
    return outputs  
  
#创建数据x_data,y_data  
x_data = np.linspace(-1,1,300)[:,np.newaxis] #[-1,1]区间,300个单位,np.newaxis增加维度  
noise = np.random.normal(0,0.05,x_data.shape) #噪点  
y_data = np.square(x_data)-0.5+noise  
  
with tf.name_scope('inputs'): #结构化  
  xs = tf.placeholder(tf.float32,[None,1],name='x_input')  
  ys = tf.placeholder(tf.float32,[None,1],name='y_input')  
  
#三层神经,输入层(1个神经元),隐藏层(10神经元),输出层(1个神经元)  
l1 = add_layer(xs,1,10,n_layer=1,activation_function=tf.nn.relu) #隐藏层  
prediction = add_layer(l1,10,1,n_layer=2,activation_function=None) #输出层  
  
#predition值与y_data差别  
with tf.name_scope('loss'):  
  loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1])) #square()平方,sum()求和,mean()平均值  
  tf.summary.scalar('loss',loss) #可视化观看常量  
with tf.name_scope('train'):  
  train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #0.1学习效率,minimize(loss)减小loss误差  
  
init = tf.initialize_all_variables()  
sess = tf.Session()  
#合并到Summary中  
merged = tf.summary.merge_all()  
#选定可视化存储目录  
writer = tf.summary.FileWriter("Desktop/",sess.graph)  
sess.run(init) #先执行init  
  
#训练1k次  
for i in range(1000):  
  sess.run(train_step,feed_dict={xs:x_data,ys:y_data})  
  if i%50==0:  
    result = sess.run(merged,feed_dict={xs:x_data,ys:y_data}) #merged也是需要run的  
    writer.add_summary(result,i) #result是summary类型的,需要放入writer中,i步数(x轴)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的各种排序算法代码
Mar 04 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
python如何让类支持比较运算
Mar 20 Python
对python requests的content和text方法的区别详解
Oct 11 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
Python requests设置代理的方法步骤
Feb 23 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
python爬虫破解字体加密案例详解
Mar 02 Python
tensorflow训练中出现nan问题的解决
Feb 10 #Python
用Eclipse写python程序
Feb 10 #Python
tensorflow建立一个简单的神经网络的方法
Feb 10 #Python
python取代netcat过程分析
Feb 10 #Python
浅谈Python黑帽子取代netcat
Feb 10 #Python
python3爬取淘宝信息代码分析
Feb 10 #Python
Python中property属性实例解析
Feb 10 #Python
You might like
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python解析多层json操作示例
2019/12/30 Python
Python编写单元测试代码实例
2020/09/10 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
《春天来了》教学反思
2014/04/07 职场文书
党员评议个人总结
2014/10/20 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
市场营销计划书范文
2015/01/16 职场文书
销售业务员岗位职责
2015/02/13 职场文书
react 路由Link配置详解
2021/11/11 Javascript