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 fabric实现远程操作和部署示例
Mar 25 Python
Python中用max()方法求最大值的介绍
May 15 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python中字符串类型json操作的注意事项
May 02 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
详解python 支持向量机(SVM)算法
Sep 18 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
php可变长参数处理函数详解
2017/02/22 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
Vue实现手机计算器
2020/08/17 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python命令行解析模块详解
2018/02/01 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
开学典礼主持词
2014/03/19 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
世界气象日活动总结
2015/02/27 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript