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中的生成器和yield详细介绍
Jan 09 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
Django添加feeds功能的示例
Aug 07 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
python实现图片转字符小工具
Apr 30 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 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绘图之在图片上写中文和英文的方法
2015/01/24 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
js DOM模型操作
2009/12/28 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
ES7之Async/await的使用详解
2019/03/28 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python模拟用户登录验证
2017/09/11 Python
基于Python实现用户管理系统
2019/02/26 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
NumPy中的维度Axis详解
2019/11/26 Python
HTML5标签小集
2011/08/02 HTML / CSS
HEMA法国:荷兰原创设计
2019/02/21 全球购物
爱心活动计划书
2014/04/26 职场文书
吨的认识教学反思
2014/04/27 职场文书
委托收款证明
2015/06/23 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
SQL CASE 表达式的具体使用
2022/03/21 SQL Server