我爱编程

2018-08-07 可视化好助手

2018-08-07  本文已影响0人  maple_yang
  TensorFlow的可视化工具 — tensorboard。通过使用这个工具我们可以很直观的看到整个神经网络的结构、框架。其效果见下图:

  给inputs指定名称,其他的部分类似。

with tf.name_scope('inputs'):
  xs = tf.placeholder(tf.float32, [None, 1],name='x_in')
  ys= tf.placeholder(tf.loat32, [None, 1],name='y_in')

  我们需要使用 tf.summary.FileWriter() (tf.train.SummaryWriter() 这种方式已经在 tf >= 0.12 版本中摒弃) 将上面‘绘画’出的图保存到一个目录中,以方便后期在浏览器中可以浏览。 这个方法中的第二个参数需要使用sess.graph , 因此我们需要把这句话放在获取session的后面。 这里的graph是将前面定义的框架信息收集起来,然后放在logs/目录下面。

sess = tf.Session() # get session
# tf.train.SummaryWriter soon be deprecated, use following
writer = tf.summary.FileWriter("logs/", sess.graph)

  然后在终端中,使用命令tensorboard --logdir logs。将终端中的网址复制到浏览器中进行访问(建议使用google chrome),这样就可以看到之前定义的框架了。
  tensorflow中提供了tf.summary.histogram()方法,用来绘制图片, 第一个参数是图表的名称, 第二个参数是图表要记录的变量。可以将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_name):
         with tf.name_scope('weights'):
              Weights= tf.Variable(tf.random_normal([in_size, out_size]),name='W')
              # tf.histogram_summary(layer_name+'/weights',Weights)
              tf.summary.histogram(layer_name + '/weights', Weights) # tensorflow >= 0.12

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

         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)
         tf.summary.histogram(layer_name + '/outputs', outputs) # Tensorflow >= 0.12

    return outputs

  由于我们对addlayer 添加了一个参数, 所以需要修改之前调用addlayer()函数的地方。
  观看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) # tensorflow < 0.12
     tf.summary.scalar('loss', loss) # tensorflow >= 0.12

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

sess= tf.Session()

# merged= tf.merge_all_summaries()    # tensorflow < 0.12
merged = tf.summary.merge_all() # tensorflow >= 0.12

# writer = tf.train.SummaryWriter('logs/', sess.graph)    # tensorflow < 0.12
writer = tf.summary.FileWriter("logs/", sess.graph) # tensorflow >=0.12

sess.run(tf.global_variables_initializer())

  为了较为直观显示训练过程中每个参数的变化,我们每隔上50次就记录一次结果 , 同时我们也应注意, merged 也是需要run 才能发挥作用的,所以在for循环中写下:

for i in range(1000):
   sess.run(train_step, feed_dict={xs:x_data, ys:y_data})
   if i%50 == 0:
      rs = sess.run(merged,feed_dict={xs:x_data,ys:y_data})
      writer.add_summary(rs, i)

参考链接:https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/4-1-tensorboard1/
     https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/4-2-tensorboard2/

上一篇下一篇

猜你喜欢

热点阅读