美文网首页我爱编程
2018-08-07 可视化好助手

2018-08-07 可视化好助手

作者: maple_yang | 来源:发表于2018-08-07 20:20 被阅读0次
      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/

    相关文章

      网友评论

        本文标题:2018-08-07 可视化好助手

        本文链接:https://www.haomeiwen.com/subject/mqdavftx.html