Chapter 2.0 TensorBoard 基本教程(GRAPHS,scale,histogram,image)

Chapter 2.0 TensorBoard 基本教程(GRAPHS,scale,histogram,image),第1张

/

2017年7月3日 增加tensorboard的histogram的说明

/

因为网上找的tensorboard教程都是在比较复杂的网络下应用,而且把几个部分都糅合在一起,对于初学者比较难看懂基本套路。所以本文分成4个部分:

例子 1:只生成 GRAPHS

例子 2:在 1 的基础上生成 scale

例子 3:在 2 的基础上生成 histogram

例子 4:生成 image输入到tensorboard

本小节的例子是建立在一个最简单的线性回归问题上的: y=kx

在预测值上加上高斯噪声,预测k的真实值

这里高斯噪声的方差很小,应该很容易得到 k=2

  graph的优点是很直观的显示每个计算节点之间的关系,这对理解一个网络是很重要的。而要得到这个graph也很简单。

tf中输入输出可以看做node(节点),每一次运算看做一个节点,所以将每一个节点命名可以很方便的建立一个计算图。tfname_scope为限定命名空间,所有这个with下的节点会被自动命名为输入的名称,同时注意到name_scope是可以嵌套的,这样可以将很复杂的网络分解成好几个部分。

实际上如果只是可视化Graph,不需要融合summary。但是一般都还需要记录一些标量,直方图的信息,这时候就需要融合summary

同时就好像init一样,merge是类的方法,需要sess来运行。运行merge将得到所有你定义的输出信息,然后将这些信息写到文件里面去(第三步),就完成啦

结果:

网络的整体视图如下,

每一个大graph里面有小的subgraph可以详细查看(因为嵌套了3次运算,所以loss里面有3个node)

上面的例子中,有两个标量,分别是猜测的k值和loss值。

在一般的dl程序中,至少会有两个标量(loss 和accuracy)

加入标量到tensorboard很简单

1将标量加入summery

2得到summery里面的值,写入文件里面,实际上

执行这个指令可以将所有的summerary都计算出来,然后得到这些数后写进文件里面

3将summary的信息(上面的m_)写入文件里面

效果

显然上面的scale只能输入的是标量,那么假如你想要输入的是高维的信息呢(比如某一隐藏层的输出 ND维度)

1将目标加入histogram中

2运行summarymerge_all()方法得到信息

3写入文件

效果

实际上从上面的3个例子可以看出tensorboard的使用是很简单的

1定义各种命名空间,也就是将各个运算节点用 name_scope包括,就可以统一命名,方便GRAPHS的展示

2定义文件writer来写入各种summary信息。注意writer并不是只能有一个,可以定义两个,一个用来写train的数据,一个用来写test的数据

3将感兴趣的量(标量,多维向量)加入到summary中

4在自己定义的时间点计算这些summary信息: sessrun(tfsummarymerge_all())有可能需要feed_dict传递一些输入。

5将得到的信息利用前面定义的writer写入到文件里面

6程序运行完毕后,打开tensorboard就可以啦

下面展示在tb里面输出image,也就是绘制的线性回归图。

因为想要显示的是有matplotlib生成的,所以先定义一个函数,其功能有:

生成 -> 将保存到内存中 -> 将这段内存传递出去

那么调用这个函数就能够生成想要的png格式的。

真正的将image嵌入到tensorboard里面的工作就可以开始了。

和scale,histogram一样,image的步骤仍然是定义、运算、写入

效果展示:

在tensorboard中经常看到会把weight和biases放到histogram中观察,但是每次看到这些图都是一脸懵逼,完全不知道怎么解读这些,下面是我从 stackoverflow  上找到的一种解答

上面的wight定义是均值为0,方差为1的服从正态分布的一组参数。从数学知识可以知道,正态分布绝大部分的值应该都分布在离均值很近的地方,只有很少一部分才会离均值很远。所以上面的histogram应该是反映下面这样的正态分布的图

由正态分布图可知有(191+191=382%)的数会落在(-05,05)的区间,那么再看tb的图,这个区间(-05,05)有比较淡的蓝色,符合数学知识。

再从正态图得到:大约有866%的值会落在(-15,15)区间内,从tb的图(-15,15)这个区间的蓝色最强,说明有很大部分的值是在这个区间内

所以从上面我们就能够知道,tb的distribution 图的颜色主要和值得分布有关,假如有很大比例的数分布在某个区间,这个区间的色彩就会强,假如很少比例的数在这个区间,这区间的色彩就越淡

下面是我的网络中全连接层的权值distribution

histogram

可以看到这一权值很大比例是分布在0的附近,整体来说这部分值都很接近0。这样就可以很容易的观察到权值分布的信息,比如知道那一部分的权值已经dead(很接近0)

你要先规划你的坐标系。

如X轴取-500到500

Y轴取-500到500

if X>0 and Y>0 then print "第一象限

if X>0 and Y<0 then print "第四象限“

if X<0 and Y>0 then print "第二象限“

if X<0 and Y<0 then print "第三象限“

若有(-333,450)则 "第二象限“

参见下面

scale(x1,y1)-(x2,y2)‘定义坐标系

你只要记住,这里的x1,y1是左上角的坐标,x2,y2是右下角的坐标,通过这两个点的坐标设定,就可以决定坐标原点的位置以及坐标轴的方向了,比如

Scale

(-300,200)-(300,-200)

以上是把坐标原点设在窗体中心,x轴长600,方向从左到右,y轴长400,方向从下向上。

Scale

(800,0)-(0,600)

以上是把坐标原点设在窗体右上角,x轴长800,方向从右到左,y轴长600,方向从上向下。

下面说坐标轴和原点的标示法:

假定自定义坐标设为:

Scale

(-300, 200)-(300, -200)

Line (-300, 0)-(300, 0) '画x轴

Line (0,

200)-(0, -200) '画y轴

CurrentX = 290

CurrentY = -5

Print "x"

'标示x轴

CurrentX = 5

CurrentY = 200

Print "y" '标示y轴

CurrentX =

5

CurrentY = -5

Print "0" '标示原点

plc1200中如何调用scaleitor:首先自己造了个FC,简单的实现a+b=c,

我建立了数据块DB1,在主程序里调用FC时,输入IN1,IN2,OUT都是在DB1里的,执行结束,转存DB1里的c值,

但是网上好多说,FC多次调用会出问题,那么我多次调用会不会也出问题,具体解释下FB该怎么写,最好以a+b=c为实例。

VB的Scale方法是用来自定义坐标系统的,比如 Form1Scale (-200,-100)-(200,100) 就是把窗口Form1的左上角设为(-200,-100),右下角设为(200,100)

以上就是关于Chapter 2.0 TensorBoard 基本教程(GRAPHS,scale,histogram,image)全部的内容,包括:Chapter 2.0 TensorBoard 基本教程(GRAPHS,scale,histogram,image)、用vb编写程序,单击按钮后,通过输入对话框输入点的两个坐标,判断点在哪一个象限,并在窗体输出判断结果、plc1200中如何调用scaleitor等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10085516.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存