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 followingwriter = 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.12merged = tf.summary.merge_all() # tensorflow >= 0.12# writer = tf.train.SummaryWriter('logs/', sess.graph) # tensorflow < 0.12writer = tf.summary.FileWriter("logs/", sess.graph) # tensorflow >=0.12sess.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)
作者:maple_yang
链接:https://www.jianshu.com/p/2393d40a70cb
共同学习,写下你的评论
评论加载中...
作者其他优质文章