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删除windows垃圾文件的方法
Jul 14 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
python重要函数eval多种用法解析
Jan 14 Python
python实现引用其他路径包里面的模块
Mar 09 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
python实现感知机模型的示例
Sep 30 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
Python Socket编程详解
Apr 25 Python
python实现简单的名片管理系统
Apr 26 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/09/24 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
javascript 写类方式之七
2009/07/05 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
python实现Flappy Bird源码
2018/12/24 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
经理管理专业自荐信范文
2013/12/31 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
2014年母亲节寄语
2014/05/07 职场文书
学用政策心得体会
2014/09/10 职场文书
2014年部门工作总结
2014/11/12 职场文书
三峡导游词
2015/01/31 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书