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 字典(Dictionary)操作详解
Mar 11 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
Python中查看文件名和文件路径
Mar 31 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python traceback捕获并打印异常的方法
Aug 31 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
Python3批量创建Crowd用户并分配组
May 20 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 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
我的群发邮件程序
2006/10/09 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
asp 取文本框名称代码
2008/12/02 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
JS之相等操作符详解
2016/09/13 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
整理Python最基本的操作字典的方法
2015/04/24 Python
python cumsum函数的具体使用
2019/07/29 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
村官工作鉴定评语
2014/01/27 职场文书
初三学习计划书范文
2014/04/30 职场文书
留学经费担保书
2014/05/12 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android