TensorFlow基础教程:tensorboard训练过程可视化

TensorFlow自带一个非常好的可视化工具tensorboard,可以从极客学院查看它的详细介绍。

tensorboard界面,可视化训练过程。
tensorboard

  • 使用tensorboard需要首先定义好需要观察的tensor的名字,以及运算过程的名字。
#在声明张量时,输入参数name即为显示在tensorboard上张量的名字
x = tf.placeholder(tf.float32, [None, 784], name='InputData')  #输入张量的名字
y = tf.placeholder(tf.float32, [None, 10], name='LabelData')   #输出张量的名字
w = tf.Variable(tf.random_normal([n_input, n_hidden_1]), name='w')  #权值张量的名字

#运算过程的名字,使用tf.name_scope('op_name')来定义
with tf.name_scope('Loss'):
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
  • 使用tf.summary记录张量或者标量的值,以便用图形显示

四个记录变量的函数

tf.summary.scalar('Loss', loss)         #记录标量
tf.summary.histogram('var_name', var)   #变量的直方图
tf.summary.distribution                 #变量的分布图
tf.summary.image                        #记录图像
  • 在张量的名字以及要观察的变量定义好之后,需要定义运算,在每次训练时,执行该运算就可以记录数据了
#使用tf.summary.merge_all()定义运算
merged_summary_op = tf.summary.merge_all()

#使用tf.summary.FileWriter(path, graph)将日志写入到文件中
#path:日志文件保存路径, graph:需要保存的图
summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph())

#每次训练时执行运算与写入函数
with tf.Session() as sess:
    summary = sess.run(merged_summary_op, feed_dict)  #执行运算
    summary_writer.add_summary(summary, curr_step)    #写入文件
  • 程序运行完后,在命令行输入以下命令后,根据输出提示在浏览器中输入地址即可玩耍tensorboard了
tensorboard --logdir=logs_path

所有程序代码(基于TensorFlow基础教程:搭建简单的DNN实现手写数字识别改写)

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf

learning_rate = 0.001
train_epochs = 20
batch_size = 64
logs_path = 'tmp/tensorflow_logs/mlp_mnist'   #日志保存路径

n_input = 784
n_hidden1 = 100
n_hidden2 = 100
n_classes = 10

#name参数,记录变量名字
x = tf.placeholder(tf.float32, shape=[None, n_input], name='InputData')
y = tf.placeholder(tf.float32, shape=[None, n_classes], name='LabelData')
weights = {'w1': tf.Variable(tf.random_normal([n_input, n_hidden1]), name='W1'),
           'w2': tf.Variable(tf.random_normal([n_hidden1, n_hidden2]), name='W2'),
           'w3': tf.Variable(tf.random_normal([n_hidden2, n_classes]), name='W3')}
biases = {'b1': tf.Variable(tf.random_normal([n_hidden1]), name='b1'),
          'b2': tf.Variable(tf.random_normal([n_hidden2]), name='b2'),
          'b3': tf.Variable(tf.random_normal([n_classes]), name='b3')}

def inference(input_x):
    layer_1 = tf.nn.relu(tf.matmul(x, weights['w1']) + biases['b1'])
    tf.summary.histogram('layer_1', layer_1)   #记录变量直方图
    layer_2 = tf.nn.relu(tf.matmul(layer_1, weights['w2']) + biases['b2'])
    tf.summary.histogram('layer_2', layer_2)   #记录变量直方图
    out_layer = tf.matmul(layer_2, weights['w3']) + biases['b3']
    return out_layer

#定义计算过程的名字
with tf.name_scope('Inference'):
    logits = inference(x)
with tf.name_scope('Loss'):
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))
with tf.name_scope('Optimizer'):
    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
    train_op = optimizer.minimize(loss)
with tf.name_scope('Accuracy'):
    pre_correct = tf.equal(tf.argmax(y, 1), tf.argmax(tf.nn.softmax(logits), 1))
    accuracy = tf.reduce_mean(tf.cast(pre_correct, tf.float32))

#记录张量的数据
tf.summary.scalar("Loss", loss)
tf.summary.scalar("Accuracy", accuracy)

init = tf.global_variables_initializer()
merged_summary_op = tf.summary.merge_all()   #定义记录运算

with tf.Session() as sess:
    sess.run(init)
    summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph())   #创建写对象
    total_batch = int(mnist.train.num_examples / batch_size)

    for epoch in range(train_epochs):
        for batch in range(total_batch):
            batch_x, batch_y = mnist.train.next_batch(batch_size)
            _, loss_, summary = sess.run([train_op, loss, merged_summary_op], feed_dict={x:batch_x, y:batch_y})   #执行记录运算
            summary_writer.add_summary(summary, epoch * total_batch + batch)     #将日志写入文件
        if epoch % 5 == 0:
            loss_, acc = sess.run([loss, accuracy], feed_dict={x:batch_x, y:batch_y})
            print("epoch {},  loss {:.4f}, acc {:.3f}".format(epoch, loss_, acc))

    print("optimizer finished!")

    #计算测试集的准确度
    test_acc = sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels})
    print('test accuracy', test_acc)

    #命令行输入tensorboard --logdir==tmp/tensorflow_logs

github源码下载
https://github.com/gamersover/tensorflow_basic_tutorial/blob/master/tensorboard_tutorial/tensorboard_tutorial.py

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值