前言
上一节使用adam优化器成功将手写数字识别的识别率优化到98%以上,这一节学习tensorboard的使用。
tensorboard
TensorBoard是一个可视化工具,它可以用来展示网络图、张量的指标变化、张量的分布情况等。特别是在训练网络的时候,我们可以设置不同的参数(比如:权重W、偏置B、卷积层数、全连接层数等),使用TensorBoader可以很直观的帮我们进行参数的选择。
名字空间
name_scope
: 为了更好地管理变量的命名空间而提出的。比如在 tensorboard 中,因为引入了 name_scope, 我们的 Graph 看起来才井然有序。
例如:
with tf.name_scope("input"):
x = tf.placeholder(tf.float32, [None, 784],name="x-input")
y = tf.placeholder(tf.float32, [None, 10] ,name="y-input")
在tensorboard中就有如下的效果:
代码
将所有的变量都加以名字空间包含,则可以看到整个网络清晰的结构。
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# 载入数据
mnist = input_data.read_data_sets("../MNIST_DATA", one_hot=True)
# 每个批次的大小
batch_size = 100
# 计算一共多少批次
n_batch = mnist.train.num_examples // batch_size
with tf.name_scope("input"):
x = tf.placeholder(tf.float32, [None, 784],name="x-input")
y = tf.placeholder(tf.float32, [None, 10] ,name="y-input")
# 创建简单神经网络(可优化)
with tf.name_scope("layout"):
with tf.name_scope("wights"):
W = tf.Variable(tf.zeros([784, 10]),name="W")
with tf.name_scope("biases"):
b = tf.Variable(tf.zeros([10]),name="b")
with tf.name_scope("wx_plus_b"):
wx_plus_b=tf.matmul(x, W) + b
with tf.name_scope("predict"):
predict = tf.nn.softmax(wx_plus_b) # softmax将输出信号转化为概率值(10个概率值)
# 可使用交叉熵代价函数来优化
with tf.name_scope("loss"):
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y,logits=predict))
# 使用梯度下降法训练,使得loss最小(#可优化)
with tf.name_scope("train"):
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
# 初始化变量
init = tf.global_variables_initializer()
with tf.name_scope("accuracy"):
# 比较概率最大的标签是否相同,结果存放在一个布尔型列表中
with tf.name_scope("correct_predict"):
correct_predict = tf.equal(tf.argmax(y, 1), tf.argmax(predict, 1)) # argmax返回一维张量中最大值所在的位置
# 求准确率
with tf.name_scope("accu"):
accuracy = tf.reduce_mean(tf.cast(correct_predict, tf.float32)) # reduce_mean求平均值
with tf.Session() as sess:
sess.run(init)
write=tf.summary.FileWriter("logs/",sess.graph)
for epoch in range(1): # 可优化
for batch in range(n_batch): # 把所有图片训练一次
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
sess.run(train_step, feed_dict={x: batch_xs, y: batch_ys})
# 用测试数据来检验训练好的模型
acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels})
print("Iter " + str(epoch) + "Test accuracy" + str(acc))
win + R打开windows的终端,切换盘符到你的代码的路径对应的盘,我这里是e盘。
切换盘符:
e:
启动tensorboard:
tensorboard --logdir=E:\py_code\tensorflow\logs
最底下的url是我们tensorboard的ip,在谷歌浏览器中网址栏输入即可进入tensorboard的网页,点击GRAPHS即可看到网络的图: