机器学习小试(3)Tensorboard 可视化初步
来源:互联网 发布:access数据库教程pdf 编辑:程序博客网 时间:2024/06/08 13:43
上文里,我们做了一个网络,用于分类平面内的三类散点。这个网络的结构很清晰,但怎么可视化呢?根据教程中的指示,开始试试Tensorboard (TB).
首先,感谢这篇写的很好的Blog,在我的学习过程中帮助很大。
http://blog.csdn.net/aliceyangxi1987/article/details/71716596,根据初步阅读学习,TB的用法是在图生成与训练过程中,记录很多参数到文件。接着,TB的可执行档会根据生成的文件开启本地的Web服务器,从现代浏览器(老的不行,显卡驱动不兼容不行)上打开即可展现丰富的可视化元素。
由于有了前人的经验分享,避免了好多坑,比如:
1. 在指定文件夹时,一定要加最后的反斜杠,如“./netdemo”要写为”./netdemo/”
2. 在启动控制台后,把当前文件夹CD到netdemo文件夹所在的父文件夹中可以避免输入含有中文的路径。注意一些版本的控制台似乎对中文支持不好。
在代码中有条理的定义大纲
根据教程,我们使用with tf.name_scope(‘name’):语法,定义多层的大纲,这样可以避免图显示的过于杂乱和没有条理。如:
#--------------------------------------------------------------#create graphwith 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 importantwriter = tf.summary.FileWriter("./netdemo/")writer.add_graph(sess.graph)
注意!文件夹名后要加反斜杠!
开启本地服务并享受FirstShow
好啦!那就开始吧!
C:\Anaconda\projects>tensorboard --logdir C:\Anaconda\projects\netdemo
理论+实践的收获
暂时不写程序啦!继续看视频学习数学知识——没有理论做基础,动手的方向是模糊的。现在经过第一阶段的理论学习+动手,基本算是刚刚从弱弱小白变为略知一丁点的小白:
1. 由理论学习,知道了神经网络最重要的就是训练技术,也就是梯度的反向加权传导的推导。
2. 由编程实践,发现TS竟然不用写偏导数计算这个步骤,于是思考为什么?原因难道是TS特有的规划计算-计算两步走策略。这个策略使得规划的图隐含带有了梯度的知识,这样TS就能自动知道梯度该怎么算!
3. 可视化验证,证明了2的猜测,看看下面训练与代价单元密密麻麻的梯度单元,就知道在产生图的时候,TS已经帮我们做好啦!
附件,静态制图代码
所谓静态制图,就是尚未挖掘强大的summary功能,只是静态的把图的结构打印出来:
from __future__ import print_functionimport tensorflow as tfimport numpy as npn = 2 # 2 featuresm = 10240 # data setsK = 3 #3 output classes#generate a circle region at center and size is Rcenter1 = np.random.rand(2).astype(np.float32)/4 + 0.5center2 = -1 * np.random.rand(2).astype(np.float32)/4 - 0.5r1 = np.random.rand(1).astype(np.float32) * 0.1 + 0.4r2 = np.random.rand(1).astype(np.float32) * 0.1 + 0.4print ("center1 = ",center1,",r1 = ", r1) print ("center2 = ",center2,",r2 = ", r2,"\n") print ("training...")#--------------------------------------------------------------#create graphwith 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") + punishwith 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 importantwriter = 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 setsy_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] = 1for 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
- 机器学习小试(3)Tensorboard 可视化初步
- Tensorflow学习:Tensorboard可视化(二)
- tensorflow学习笔记(七):tensorboard可视化
- Tensorflow学习:Tensorboard可视化
- TensorBoard可视化学习
- TensorBoard:可视化学习
- TensorBoard可视化学习
- TensorFlow-6-TensorBoard 可视化学习
- tensorflow学习之tensorboard可视化
- tensorflow学习(3):解读mnist_experts例子,训练保存模型并tensorboard可视化
- TensorFlow学习笔记(七):TensorBoard可视化助手
- tensorboard可视化
- 06:Tensorflow的可视化工具Tensorboard的初步使用
- 【tensorflow学习】使用tensorboard实现数据可视化
- 极客学院 TensorBoard:可视化学习
- tensorflow学习——TensorBoard可视化
- 87、使用TensorBoard进行可视化学习
- TensorFlow学习--TensorBoard神经网络可视化
- mPDF的安装使用
- 使用Timer3实现两路(可四路)PWM波形的输出
- 【SSM 1】SpringMVC、Spring和Struts的区别
- 详解Android中Shape的用法
- 剑指offer | 训练题62:数据流中的中位数
- 机器学习小试(3)Tensorboard 可视化初步
- 父子类继承时候各部分执行顺序
- Idea开发环境中搭建Maven并且使用Maven打包部署程序
- Oracle 查询语句
- vim 多窗口编辑
- 【Dockerfile】使用Dockerfile创建带Apache服务的Centos Docker镜像
- 控制台_udp服务器_客户端
- flask 应用程序的工厂函数
- 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?