16 tensorBorad 可视化练习

本文详细介绍了如何使用 TensorBoard 可视化神经网络的训练过程,包括权重和偏置的变化。通过示例代码展示了如何设置权重、偏置及损失值的图表,并解释了如何在训练过程中记录和观察这些变化。最后,文章提到了记录训练数据的重要性,以实现更直观地查看参数变化。
摘要由CSDN通过智能技术生成

上一篇讲到了 如何可视化TesorBorad整个神经网络结构的过程。 其实tensorBorad还可以可视化训练过程( biase变化过程) , 这节重点讲一下可视化训练过程的图标是如何做的 。请看下图, 这是如何做到的呢?

这里写图片描述

在hisograms里面我们还可以看到更多的layers的变化:

这里写图片描述

(P.S. 灰猫使用的tensorflow v1.1 显示的效果可能和视频中的不太一样, 但是tensorBorad 的使用方法的是一样的。)

这里还有一个events , 在这次练习中我们会把 整个训练过程中的误差值(loss)在event里面显示出来, 甚至你可以显示更多你想要显示的东西.

这里写图片描述

好了, 开始练习吧

本次的代码会在上一节的基础上进行修改.

制做输入源

由于这节我们观察训练过程中神经网络的变化, 所以首先要添一些模拟数据.
Python 的numpy 工具包可以帮助我们制造一些模拟数据. 所以我们先导入这个工具包:

from future import print_function
import tensorflow as tf
import numpy as np
1
2
3
4
1
2
3
4
然后借助 np中的np.linespace() 产生随机的数字, 同时为了模拟更加真实我们会添加一些噪声,这些噪声是通过np.random,normal() 随机产生的.

## make up some data
x_data= np.linspace(-1, 1, 300)[:,np.newaxis]
noise= np.random.normal(0, 0.05, x_data.shape)
y_data= np.square(x_data) -0.5+ noise
1
2
3
4
5
1
2
3
4
5
输入源的问题解决之后, 我们开始制作对Weights和biase的变化图表吧. 我们期望可以做到如下的效果, 那么首先从layer1/weight做起吧

这里写图片描述

这个效果是如何做到的呢,请看下一个标题

在layer中为Weights,biases 设置变化图表

通过上图的观察我们发现每个layer后面有有一个数字: layer1 和layer2

于是我们在 add_layer()方法中添加一个参数n_layer ,用来标识层数, 并且用变量layer_name代表其每层的名名称 , 代码如下:

def add_layer(
inputs ,
in_size,
out_size,
n_layer,
activation_function=None):
## add one more layer and return the output of this layer
layer_name=’layer%s’%n_layer ## define a new var

and so on ……

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
接下来,我们层中的Weights设置变化图, tensorflow中提供了tf.histogram_summary()方法,用来绘制图片, 第一个参数是图表的名称, 第二个参数是图表要记录的变量

ef add_layer(inputs ,
in_size,
out_size,n_layer,
activation_function=None):
## add one more layer and return the output of this layer
layer_name=’layer%s’%n_layer
with tf.name_scope(‘layer’):
with tf.name_scope(‘weights’):
Weights= tf.Variable(tf.random_normal([in_size, out_size]),name=’W’)
tf.histogram_summary(layer_name+’/weights’,Weights)

and so no ……

1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
同样的方法我们对biases进行绘制图标:

with tf.name_scope(‘biases’):
biases = tf.Variable(tf.zeros([1,out_size])+0.1, name=’b’)
tf.histogram_summary(layer_name+’/biase’,biases)
1
2
3
4
1
2
3
4
至于activiation_function 可以不绘制. 我们对output 使用同样的方法:

tf.histogram_summary(layer_name+’/outputs’,outputs)
1
1
最终经过我们的修改 , addlayer()方法成为如下的样子:

def add_layer(inputs ,
in_size,
out_size,n_layer,
activation_function=None):
## add one more layer and return the output of this layer
layer_name=’layer%s’%n_layer
with tf.name_scope(‘layer’):
with tf.name_scope(‘weights’):
Weights= tf.Variable(tf.random_normal([in_size, out_size]),name=’W’)
tf.histogram_summary(layer_name+’/weights’,Weights)

     with tf.name_scope('biases'):
          biases = tf.Variable(tf.zeros([1,out_size])+0.1, name='b')
          tf.histogram_summary(layer_name+'/biase',biases)

     with tf.name_scope('Wx_plus_b'):
          Wx_plus_b = tf.add(tf.matmul(inputs,Weights), biases)

     if activation_function is None:
        outputs=Wx_plus_b
     else:
        outputs= activation_function(Wx_plus_b)

     tf.histogram_summary(layer_name+'/outputs',outputs)

return outputs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
修改之后的名称会显示在每个tensorBorad中每个图表的上方显示, 如下图所示:

这里写图片描述

由于我们对addlayer 添加了一个参数, 所以修改之前调用addlayer()函数的地方.
对此处进行修改:

add hidden layer

l1= add_layer(xs, 1, 10 , activation_function=tf.nn.relu)

add output layer

prediction= add_layer(l1, 10, 1, activation_function=None)
1
2
3
4
1
2
3
4
添加n_layer参数后, 修改成为 :

add hidden layer

l1= add_layer(xs, 1, 10,n_layer=1, activation_function=tf.nn.relu)

add output layer

prediction= add_layer(l1, 10, 1,n_layer=2, activation_function=None)
1
2
3
4
1
2
3
4
设置loss的变化图

Loss 的变化图和之前设置的方法略有不同. loss是在tesnorBorad 的event下面的, 这是由于我们使用的是tf.scalar_summary() 方法.

loss的变化图

观看loss的变化比较重要. 当你的loss呈下降的趋势,说明你的神经网络训练是有效果的.

修改后的代码片段如下:

with tf.name_scope(‘loss’):
loss= tf.reduce_mean(tf.reduce_sum(
tf.square(ys- prediction), reduction_indices=[1]))
tf.scalar_summary(‘loss’,loss)
1
2
3
4
1
2
3
4
给所有训练图‘合并‘

接下来, 开始合并打包。
tf.merge_all_summaries() 方法会对我们所有的’summaries’ 合并到一起.
因此在原有代码片段中添加:

sess= tf.Session()
merged= tf.merge_all_summaries()
writer = tf.train.SummaryWriter(“logs/”, sess.graph)
sess.run(tf.initialize_all_variables())
1
2
3
4
5
1
2
3
4
5
训练数据

假定给出了 x_data,y_data并且训练1000次.

for i in range(1000):
sess.run(train_step, feed_dict={xs:x_data, ys:y_data})
1
2
3
1
2
3
以上这些仅仅可以记录很绘制出训练的图表, 但是不会记录训练的数据。
为了较为直观显示训练过程中每个参数的变化,我们每隔上50次就记录一次结果 , 同时我们也应注意, merged 也是需要run 才能发挥作用的,所以在for循环中写下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值