这个神经网络可视化是在前面的回归问题基础上学习的,可直观地看到数据的流向,整个神经网络的结构,loss函数的下降曲线,和biases和weights等参数的直方图。
给输入设置一个大的框架然后再在palceholder中加入name=‘x_in’,name='y_in’给xs和ys分别命名:
with tf.name_scope('inputs'):
xs = tf.placeholder(tf.float32,[None,1],name='x_in')
ys = tf.placeholder(tf.float32,[None,1],name='y_in')
设置add_layer,步骤同前,
例如先设置layer大框架,然后再放分别指定里面的小构建,
拿Weights参数来举例,layer框架中嵌套许多框架,在里面定义一个名为‘weights’的框架,其中有参数Weights叫‘w’。
tensorflow中提供了tf.histogram_summary()方法,用来绘制变化的图片, 第一个参数是图表的名称, 第二个参数是图表要记录的变量,在这里记录Weights变量
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.summary.histogram(layer_name + '/weights',Weights)
结构图
Weights参数图
loss和train构建结构方法相同
但是loss的变化图略有不同
构建结构:
with tf.name_scope('loss'):
loss = tf.reduce_mean(tf.square(ys - prediction))#loss函数
tf.summary.scalar('loss',loss)
with tf.name_scope('train'):
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)#梯度下降优化器
构建loss变化图,可以帮助我们直观的看出loss在训练过程中的下降趋势,这样一来我们就知道了这个网络的训练效果
with tf.name_scope('loss'):
loss = tf.reduce_mean(tf.square(ys - prediction))#loss函数
tf.summary.scalar('loss',loss)
合并打包
merged=tf.summary.merge_all()
将已经绘画的图保存到一个目录中
writer = tf.summary.FileWriter("logs/",sess.graph)
训练之后要将合并的结果放入log就需要writer.add_summary()
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i%50==0:
result = sess.run(merged,feed_dict={xs:x_data,ys:y_data})
# print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})
writer.add_summary(result,i)
运行后会产生一个log文件,我是在pycharm中运行的,在terminal输入tensorboard --logdir logs 就会出现一个网址
将网址复制到chrome浏览器中