文档章节

Tensorboard 可视化初步

孟飞阳
 孟飞阳
发布于 2017/07/09 10:22
字数 1300
阅读 46
收藏 0

首先,感谢这篇写的很好的Blog,在我的学习过程中帮助很大。 
http://blog.csdn.net/aliceyangxi1987/article/details/71716596,根据初步阅读学习,TB的用法是在图生成与训练过程中,记录很多参数到文件。接着,TB的可执行档会根据生成的文件开启本地的Web服务器,从现代浏览器(老的不行,显卡驱动不兼容不行)上打开即可展现丰富的可视化元素。 
由于有了前人的经验分享,避免了好多坑,比如: 
1. 在指定文件夹时,一定要加最后的反斜杠,如“./netdemo”要写为”./netdemo/” 
2. 在启动控制台后,把当前文件夹CD到netdemo文件夹所在的父文件夹中可以避免输入含有中文的路径。注意一些版本的控制台似乎对中文支持不好。

在代码中有条理的定义大纲

根据教程,我们使用with tf.name_scope(‘name’):语法,定义多层的大纲,这样可以避免图显示的过于杂乱和没有条理。如:

#--------------------------------------------------------------
#create graph
with tf.name_scope('network'):
    with tf.name_scope('input'):
        s1 = n
        #...
    with tf.name_scope('hidden1'):
        #...

可以按照自己的代码结构缩进,得到更好的多层效果。一旦分层,生成的图便可以逐级点开,如下图: 
大纲缩放

为变量做好命名

需要友好展示的变量,加入 name=属性,这样在图中则会带上名字。比如:

    with tf.name_scope('hidden3'):
        s4 = 17
        W3 = tf.Variable(tf.random_uniform([s3,s4],-1,1),name="W3")
        b3 = tf.Variable(tf.random_uniform([1],-1,1),name="b3") 
        z4 = tf.matmul(a3,W3) + b3*tf.ones([1,s4],name="z4")
        a4 = tf.nn.sigmoid(z4,name="a4")

注意,变量的名字并不影响执行。设置后,相应变量的名字就出现在图上: 
变量

写入磁盘

在sess.init()后加入写入代码:

#--------------------------------------------------------------
### create tensorflow structure end ###
sess = tf.Session()
sess.run(init)          # Very important

writer = tf.summary.FileWriter("./netdemo/")
writer.add_graph(sess.graph)

注意!文件夹名后要加反斜杠!

开启本地服务并享受FirstShow

好啦!那就开始吧!

C:\Anaconda\projects>tensorboard --logdir C:\Anaconda\projects\netdemo

TensorBoard

理论+实践的收获

暂时不写程序啦!继续看视频学习数学知识——没有理论做基础,动手的方向是模糊的。现在经过第一阶段的理论学习+动手,基本算是刚刚从弱弱小白变为略知一丁点的小白: 
1. 由理论学习,知道了神经网络最重要的就是训练技术,也就是梯度的反向加权传导的推导。 
2. 由编程实践,发现TS竟然不用写偏导数计算这个步骤,于是思考为什么?原因难道是TS特有的规划计算-计算两步走策略。这个策略使得规划的图隐含带有了梯度的知识,这样TS就能自动知道梯度该怎么算! 
3. 可视化验证,证明了2的猜测,看看下面训练与代价单元密密麻麻的梯度单元,就知道在产生图的时候,TS已经帮我们做好啦! 
梯度

附件,静态制图代码

所谓静态制图,就是尚未挖掘强大的summary功能,只是静态的把图的结构打印出来:

from __future__ import print_function
import tensorflow as tf
import numpy as np
n = 2      # 2 features
m = 10240   #  data  sets
K = 3      #3 output classes
#generate a circle region at center and size is R
center1 = np.random.rand(2).astype(np.float32)/4 + 0.5
center2 = -1 * np.random.rand(2).astype(np.float32)/4 - 0.5
r1 = np.random.rand(1).astype(np.float32) * 0.1 + 0.4
r2 = np.random.rand(1).astype(np.float32) * 0.1 + 0.4

print ("center1 = ",center1,",r1 = ", r1)            
print ("center2 = ",center2,",r2 = ", r2,"\n")            
print ("training...")
#--------------------------------------------------------------
#create graph
with tf.name_scope('network'):
    with tf.name_scope('input'):
        s1 = n
        a1 = tf.placeholder(tf.float32,[None,s1],name="in") 
    with tf.name_scope('hidden1'):
        s2 = 17
        W1 = tf.Variable(tf.random_uniform([s1,s2],-1,1),name="W1")
        b1 = tf.Variable(tf.random_uniform([1],-1,1),name="b1") 
        z2 = tf.matmul(a1,W1) + b1*tf.ones([1,s2],name="z2")
        a2 = tf.nn.sigmoid(z2,name="a2")
    with tf.name_scope('hidden2'):
        s3 = 17
        W2 = tf.Variable(tf.random_uniform([s2,s3],-1,1),name="W2")
        b2 = tf.Variable(tf.random_uniform([1],-1,1),name="b2") 
        z3 = tf.matmul(a2,W2) + b2*tf.ones([1,s3],name="z3")
        a3 = tf.nn.sigmoid(z3,name="a3")
    with tf.name_scope('hidden3'):
        s4 = 17
        W3 = tf.Variable(tf.random_uniform([s3,s4],-1,1),name="W3")
        b3 = tf.Variable(tf.random_uniform([1],-1,1),name="b3") 
        z4 = tf.matmul(a3,W3) + b3*tf.ones([1,s4],name="z4")
        a4 = tf.nn.sigmoid(z4,name="a4")
    with tf.name_scope('hidden4'):
        s5 = 17
        W4 = tf.Variable(tf.random_uniform([s4,s5],-1,1),name="W4")
        b4 = tf.Variable(tf.random_uniform([1],-1,1),name="b4") 
        z5 = tf.matmul(a4,W4) + b4*tf.ones([1,s5],name="z5")
        a5 = tf.nn.sigmoid(z5,name="a5")
    with tf.name_scope('output'):
        ##output
        s6 = 3
        W5 = tf.Variable(tf.random_uniform([s5,s6],-1,1),name="W5")
        b5 = tf.Variable(tf.random_uniform([1],-1,1),name="b5") 
        z6 = tf.matmul(a5,W5) + b5*tf.ones([1,s6],name="z6")
        a6 = tf.nn.sigmoid(z6,name="out")
with tf.name_scope('loss'):
#--------------------------------------------------------------
    y_ = tf.placeholder(tf.float32,[None,K],name="tr_out")

    lamda = 0.0000001
    punish = lamda *(tf.reduce_sum(W1**2) + tf.reduce_sum(W2**2) 
            + tf.reduce_sum(W3**2) + tf.reduce_sum(W4**2)
            + tf.reduce_sum(W5**2))
    loss = tf.reduce_mean(tf.square(a6-y_),name="loss") + punish
with tf.name_scope('trainning'):
    optimizer = tf.train.AdamOptimizer(name="opt")
    train = optimizer.minimize(loss,name="train")

init = tf.global_variables_initializer()
#--------------------------------------------------------------
### create tensorflow structure end ###
sess = tf.Session()
sess.run(init)          # Very important

writer = tf.summary.FileWriter("./netdemo/")
writer.add_graph(sess.graph)

#generate trainning data between (-1,1)
x_data = np.random.rand(m,n).astype(np.float32) * 2 - 1
#calc the y for each training sets
y_data = np.zeros([m,K]).astype(np.float32)
for idx in range(m):
    if (x_data[idx,0] - center1[0])**2 + (x_data[idx,1] - center1[1])**2 <= r1**2:
        y_data[idx,1] = 1
    elif (x_data[idx,0] - center2[0])**2 + (x_data[idx,1] - center2[1])**2 <= r2**2:
        y_data[idx,2] = 1
    else:
        y_data[idx,0] = 1

for step in range(10000):
    sess.run(train,feed_dict={a1:x_data,y_:y_data})
    if step % 1000 == 0:
        print(step, sess.run(loss,feed_dict={a1:x_data,y_:y_data}))
        #generate trainning data between (-1,1)
        x_data = np.random.rand(m,n).astype(np.float32) * 2 - 1
        #calc the y for each training sets
        y_data = np.zeros([m,K]).astype(np.float32)
        for idx in range(m):
            if (x_data[idx,0] - center1[0])**2 + (x_data[idx,1] - center1[1])**2 <= r1**2:
                y_data[idx,1] = 1
            elif (x_data[idx,0] - center2[0])**2 + (x_data[idx,1] - center2[1])**2 <= r2**2:
                y_data[idx,2] = 1
            else:
                y_data[idx,0] = 1

 

本文转载自:http://blog.csdn.net/goldenhawking/article/details/74615266

共有 人打赏支持
孟飞阳
粉丝 206
博文 964
码字总数 543203
作品 5
朝阳
个人站长
TensorFlow——可视化工具TensorBoard的使用

1、TensorBoard简介 Tensorboard是Tensorflow官方推出了可视化工具,它可以通过TensorFlow程序运行过程中输出的日志文件可视化TensorFlow程序的运行状态。 TensorBoard 和 TensorFLow 程序跑...

飞天小橘子
05/05
0
0
window下启动tensorboard

tensorboard是TensorFlow的一个可视化工具,能够监控TensorFlow运行过程中的计算图,各种指标随着时间的变化趋势以及训练中使用到的图像等信息。 先贴个总结:首先,必须在终端启动tensorboa...

Flying_sfeng
2017/04/10
0
0
斯坦福tensorflow教程(二) tensorflow相关运算

1.认识下TensorBoard TensorFlow不仅是一个软件库,而是一整套包括TensorFlow、TensorBoard、Tensor Serving在内的软件包。为了更大程度地利用TensorFlow,我们应该了解如何将它们串联起来应...

致Great
05/09
0
0
阿里云学生服务器搭建TensorFlow&Tensorboard使用&jupyter notebook配置

TensorFlow 本文内容是如何在阿里云学生服务器下搭建TensorFlow OS Ubuntu 16.04 64位 python 3.5 1.更新软件源 2.安装Python 3.5 输入python命令查看当前默认python版本 Python 3.5 3.安装T...

SpiffyEight77
2017/11/17
0
0
TensorBoard入门

前言 TensorFlow是以流动的张量为名的神经网络开发库,所以Google为了让人们更直观的了解流动的张量的含义,他们做了个TensorBoard让我们直观的看到我们写的框架是怎么个流动法的(纯属YY)。...

Jcme丶Ls
2017/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用责任链模式设计一个拦截器

前言 近期在做 Cicada 的拦截器功能,正好用到了责任链模式。 这个设计模式在日常使用中频率还是挺高的,借此机会来分析分析。 责任链模式 先来看看什么是责任链模式。 引用一段维基百科对其...

编程SHA
12分钟前
0
0
IDE,SATA,SCSI,SAS,FC,SSD说明与区别

DE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘。SCSI是”小型计算机系统专用接口”的简称,SCSI硬盘就是采用这种接口的硬盘。SAS就是串口的SCSI接口。一般...

mskk
14分钟前
0
0
MySQL面试题集锦

什么是数据库索引?索引有哪几种类型?什么是最左前缀原则?索引算法有哪些?有什么区别? 索引是对数据库表中一列或多列的值进行排序的一种结构。一个非常恰当的比喻就是书的目录页与书的正...

老道士
50分钟前
0
0
使用 LogStash 归集日志

elastic 官网: https://www.elastic.co/ 为了便于集中查看多台主机的业务日志,使用 Filebeat, Redis, Logstash的方式进行收集: (1) Filebeat 监控日志文件的变化, 将新增部分写入redis中, 每...

ouhoo
53分钟前
0
0
java序列化(六) - protostuff序列化

添加依赖 <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.5.9</version> </de......

晨猫
59分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部