TensorBoard应用进阶与TensorFlow游乐场

时间:2019-10-16
本文章向大家介绍TensorBoard应用进阶与TensorFlow游乐场,主要包括TensorBoard应用进阶与TensorFlow游乐场使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

主要内容:

一、TensorBoard应用进阶

1.1图像的显示

在构建模型的输入层时,定义了占位符x,placeholder就是接收训练样本的图像数据。为了把这些图像在TensorBoard中显示出来,需要把它加入summary中去。

通过tf.summary.image()函数,把带进来的图像信息加到summary中去。它的第一个参数是标识ID;第二个参数是图像的数据;第三个参数为10,表示最多显示10张图片。

image_shaped_input要求的形是一个四维的模式,后面三个参数分别表示图像的长、宽以及颜色的通道数(灰度图为1),第一个参数表示一次有多少行数据,-1表示暂时不确定,会根据带进来所有数据的总数来计算。

1.2张量的显示

在TensorBoard中以直方图的形式显示在计算中一些tensor的情况

可以通过tf.summary.histogram()函数。它的第一个参数也是标识ID,第二个参数是要显示的tensor值。

1.3标量的显示

当我们定义好loss_function以后,就可以通过tf.summary.scalar()函数,把loss值以标量的形式显示出来。

我们还可以把准确率也以标量的形式显示出来。

1.4训练模型的显示

在训练模型的过程中,需要把前面所有定义的summary操作合并。

这里定义了一个merged_summary_op,直接调用tf.summary.merge_all()函数就可以了。

接下来把计算图写进去,调用了tf.summary.FileWriter()函数。

在训练的迭代过程中,需要生成真正写入到日志文件中的信息,通过sess.run()函数来实现,返回的结果赋给summary_str,并加入到摘要信息中。

 完整代码为:

import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
import matplotlib.pyplot as plt
import numpy as np
from time import time
#载入数据
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)


#建立模型  —  定义全连接层函数
def fcn_layer(inputs,input_dim,output_dim,activation=None): #输入数据,输入神经元数量,输出神经元数量,激活函数

    W = tf.Variable(tf.truncated_normal([input_dim, output_dim], stddev=0.1))    # 以截断正态分布的随机数初始化W
    b = tf.Variable(tf.zeros([output_dim]))    # 以0初始化b
    XWb = tf.matmul(inputs, W)+b    # 建立表达式:inputs * W + b
    if activation is None:  # 薪认不使用激活函数
        outputs = XWb
    else:  # 若传入激活函数,则用其对输出结果进行变换
        outputs = activation(XWb)
    return outputs

#构建输入层
x= tf.placeholder(tf.float32, [None, 784], name='X')
image_shaped_input = tf.reshape(x,[-1, 28, 28, 1])
tf.summary.image('input',image_shaped_input,10)

#构建隐藏层
h1 = fcn_layer(inputs=x,input_dim=784,output_dim=256,activation=tf.nn.relu)
#构建输出层
forward = fcn_layer(inputs=h1,input_dim=256,output_dim=10,activation=None)
pred = tf.nn.softmax(forward)
tf.summary.histogram('forward',forward)


y= tf.placeholder(tf.float32, [None, 10], name='Y')  #定义标签数据占位符
loss_function = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=forward,labels=y))  #注意第一个参数是不做Softmax的前向计算结果
tf.summary.scalar('loss',loss_function) #将loss损失以标量显示

#设置训练参数
train_epochs = 40   #训练轮数
batch_size=50      #单次训练样本数(批次大小)
total_batch= int(mnist.train.num_examples/batch_size)#一轮训练有多少批次
display_step=1     #显示粒度
learning_rate=0.01   #学习率


#选择优化器
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss_function)

#定义准确率
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(pred,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#准确率,将布尔值转化为浮点数,并计算平均值

tf.summary.scalar('accuracy',accuracy)


sess = tf.Session()
sess.run(tf.global_variables_initializer())

merged_summary_op = tf.summary.merge_all()  #合并所有summary
writer = tf.summary.FileWriter('log/',sess.graph) #创建写入符

startTime = time()
for epoch in range(train_epochs):
    for batch in range(total_batch):
        xs, ys = mnist.train.next_batch(batch_size)  # 读取批次数据
        sess.run(optimizer,feed_dict={x:xs,y:ys})   # 执行批次训练

        #生成summary
        summary_str = sess.run(merged_summary_op,feed_dict={x:xs,y:ys})
        writer.add_summary(summary_str,epoch) #将summary写入文件

    loss,acc = sess.run([loss_function,accuracy],feed_dict={x:mnist.validation.images,y:mnist.validation.labels})
    #打印训练过程中的详细信息
    if (epoch+1) % display_step == 0:
        print("Train Epoch:",'%02d' %(epoch+1),"Loss=","{:.9f}".format(loss),"Accuracy=","{:.4f}".format(acc))

duration = time()-startTime  #显示运行总时间
print("Train Finished takes:","{:.2f}".format(duration))
#使用测试集评估模型
accu_test = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
print("Test Accuracy:",accu_test)
MNIST_FCN8.4_TensorBoard

Note:未能正常显示TensorBoard,没找到原因

二、TensorFlow游乐场

TensorFlow游乐场是一个通过网页浏览器就可以训练简单神经网络的web应用。它不但可以让用户自定义神经网络的结构,还可以可视化训练过程。有利于初学者提高对神经网络的认识。

网址:http://playground.tensorflow.org

使用方法演示:https://minghuiwu.gitbook.io/tfbook/

原文地址:https://www.cnblogs.com/HuangYJ/p/11688153.html