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内置函数bin() oct()等实现进制转换
Dec 30 Python
python实现带错误处理功能的远程文件读取方法
Apr 29 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
目前最全的python的就业方向
Jun 05 Python
Django model反向关联名称的方法
Dec 15 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
Python 中 sorted 如何自定义比较逻辑
Feb 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
Protoss兵种对照表
2020/03/14 星际争霸
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
继续学习javascript闭包
2015/12/03 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
Python字符转换
2008/09/06 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
党员批评与自我批评
2014/02/12 职场文书
社区母亲节活动方案
2014/03/05 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
扬州个园导游词
2015/02/06 职场文书
投标单位介绍信
2015/05/05 职场文书
读书笔记格式
2015/07/02 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
高三物理教学反思
2016/02/20 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers