天天看点

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

前面我们讲了tensorflow构建简单神经网络,今天我们讲讲tensorflow另一个强大的工具tensorboard。简单来说,tensorboard可以把我们整个神经网络运算的流程,损失函数的变化,准确率的变化,特征值的变化。等等以可视化图表的形式表现出来。(反正就是装B利器)。

下面我来说下实现的具体代码

我们就以前面建立的简单神经网络为例,在这个例子上建立可视化的tensorboard

1.还是导入数据集,设定各项参数

import tensorflow as tf

#读取MNIST数据

from tensorflow.examples.tutorials.mnist import input_data
#从MNIST_data/中读取MNIST数据。这条语句在数据不存在时会自动执行下载
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True)

#设定网络参数
learning_rate = 0.001 #学习率
training_epochs = 15 #训练次数,总体数据需要循环多少次
batch_size = 100 #每批次要取的数据的量,这里是提取100张图片
n_hidden_1 = 256 #隐藏层1的神经元个数
n_hidden_2 = 256 #隐藏层2的神经元个数
n_input = 784 #输入层的个数
n_classes = 10 #输出层的个数(我们要识别的分类数)
n_samples = mnist.train.num_examples #训练数据的总数据量,这里是55000
           

2.这里我们首先设置第一个tensorboard参数,命名

with tf.name_scope('inputs'): #tensorboard画流程图时为了可视化封装变量, 主要目的是为了更加方便地管理参数命名。这里大家可以简单的理解,要想tensorboard记住它,就要给它命个名。
    x = tf.placeholder('float', [None, n_input])
    y = tf.placeholder('float', [None, n_classes])

#让tensorboard显示输入的图片
with tf.name_scope('input_reshape'):
    image_input = tf.reshape(x, [-1, 28, 28, 1])
    tf.summary.image('input', image_input, 10) #这里我们显示10个图片
           

3.构建神经网络

#构建多层神经网络
def add_layer(x, input_tensors, output_tensors, layer_name, activation_function = None):
    with tf.name_scope('Layer'):
        with tf.name_scope('Weights'):
            weight = tf.Variable(tf.random_normal([input_tensors, output_tensors]), name = 'w')
            tf.summary.histogram(name = layer_name + '/weights', values=weight)#这行代码的目的是以直方图的形式显示权重W的变化,layer_name 来标记每一层的W
        with tf.name_scope('Biases'):
            bias = tf.Variable(tf.random_normal([output_tensors]), name='b')
            tf.summary.histogram(name=layer_name + '/biases', values=bias)
        with tf.name_scope('Wx_plus_b'):
            #构建y = wx + b 方程式
            formula = tf.add(tf.matmul(x, weight), bias)

        #下面的目的是如果是最后的输出层,激活函数就是None 直接输出结果,如果不是就要加入激活函数
        if activation_function is None:
            outputs = formula
        else:
            outputs = activation_function(formula)
        tf.summary.histogram(name=layer_name + '/outputs', values=outputs)
        return outputs
           

tf.summary.histogram是画直方图,这里我们画出权重w的直方图,其他同理

4.定义隐藏层输出层

#定义隐藏层layer1,layer2还有输出层
layer1 = add_layer(x, input_tensors=n_input, output_tensors=n_hidden_1, layer_name='layer1', activation_function=tf.nn.relu)
layer2 = add_layer(layer1, input_tensors=n_hidden_1, output_tensors=n_hidden_2, layer_name='layer2', activation_function=tf.nn.relu)
out_layer = add_layer(layer2, input_tensors=n_hidden_2, output_tensors=n_classes, layer_name='out_layer', activation_function=None)
           

5.损失函数,梯度下降,准确率

#定义损失函数,梯度下降方法,准确率

with tf.name_scope('cost'):
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=out_layer, labels=y))
    tf.summary.scalar('loss', cost)

with tf.name_scope('optimizer'):
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)

with tf.name_scope('Accuracy'):
    acc = tf.equal(tf.argmax(out_layer, 1), tf.argmax(y, 1))
    acc = tf.reduce_mean(tf.cast(acc, tf.float32))
    tf.summary.scalar("accuracy", acc)
           

tf.summary.scalar('loss', cost) 画出损失函数的线性图

6.初始化所有变量

#初始化所有变量
init = tf.global_variables_initializer()

merged = tf.summary.merge_all() #merge_all 可以将所有summary全部保存到磁盘,以便tensorboard显示。
           

我们把我们定义好的所有要可是画的变量进行保存,但目前我们还没有开始画图,因为tensorflow还没开始运行建立会话,只有建立会话开始运行可视化的这些变量才开始保存。

7.建立会话,开始运行

with tf.Session() as sess:
    sess.run(init)

    writer = tf.summary.FileWriter('tensorboard3/', graph=sess.graph) #指定一个文件用来保存图

    for epoch in range(training_epochs):
        avg_cost = 0.0
        total_batch = int(n_samples/batch_size)

        for i in range(total_batch):
            batch_x, batch_y = mnist.train.next_batch(batch_size)
            _, c, result = sess.run([optimizer, cost, merged], feed_dict={x:batch_x, y:batch_y})
            avg_cost += c/total_batch
            writer.add_summary(result, epoch*total_batch+i)

        print("Epoch: {} cost={}".format(epoch + 1, avg_cost))

    print("Training Completed in {} Epochs".format(training_epochs))
           

8.下面开始运行代码,运行完毕后我们会在tensorboard3看到我们保存的可视化数据。

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

这时我们进入命令行工具,dos

进入我们存储放tensorboard3文件的目录 输入 tensorbaord --logdir='tensorboards'

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

接下来我们在浏览器上输入localohost:6006就可以看到我们向要的东西了。

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

我们可以看到我们准确率和损失值的变化

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

我们输入的数据

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

我们整个神经网络的流程图

tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard
tensorflow 模型可视化_TensorFlow-模型可视化TensorBoard

w 和b 还有输入等特征值的变化。

里面还有好多细节大家可以自己点点试试,具体功能大家可以去官网查看(其实我知道也不多,呵呵)

好了总之这个tensor board可视化我们已经实现了。