• 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:需要把log文件夹放在某个盘的子目录下才能正常显示TensorBoard,没找到原因,如:

     

    二、TensorFlow游乐场

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

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

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

  • 相关阅读:
    BGP
    物联网时代的智能家居
    Linux下找不到动态链接库
    Java清洁:终结处理和垃圾回收
    单例模式的改进
    shell脚本中的括号和实例
    shell如何生成rpm包仓库列表文件的对比结果
    shell脚本实现覆盖写文件和追加写文件
    怎么用命令查看某个目录下子目录占用空间的大小
    利用shell脚本函数实现网络连通性的检测
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/11688153.html
Copyright © 2020-2023  润新知