zoukankan      html  css  js  c++  java
  • 【4-2】Tensorboard网络运行

    一、参考代码

     1 import tensorflow as tf
     2 from tensorflow.examples.tutorials.mnist import input_data
     3 
     4 #载入数据集
     5 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     6 
     7 #每个批次的大小
     8 batch_size = 100
     9 #计算一共有多少个批次
    10 n_batch = mnist.train.num_examples // batch_size
    11 
    12 #参数概要
    13 def variable_summaries(var):                    #定义了一个函数,用来看平均值、标准差、最值
    14     mean = tf.reduce_mean(var)
    15     tf.summary.scalar('mean',mean)              #平均值
    16     with tf.name_scope('stddev'):
    17         stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
    18     tf.summary.scalar('stddev',stddev)          #标准差
    19     tf.summary.scalar('max',tf.reduce_max(var)) #最大值
    20     tf.summary.scalar('min',tf.reduce_min(var)) #最小值
    21     tf.summary.histogram('histogram',var)       #直方图
    22  
    23 #命名空间
    24 with tf.name_scope('input'):
    25     #定义两个placeholder
    26     x = tf.placeholder(tf.float32,[None,784],name='x-input')
    27     y = tf.placeholder(tf.float32,[None,10],name='y-input')
    28 
    29     
    30 with tf.name_scope('layer'):
    31     #创建一个简单的神经网络
    32     with tf.name_scope('wights'):
    33         W = tf.Variable(tf.zeros([784,10]),name='W')
    34         variable_summaries(W)           #将参数W传入创建的函数中
    35     with tf.name_scope('biases'):    
    36         b = tf.Variable(tf.zeros([10]),name='b')
    37         variable_summaries(b)           #将参数b传入创建的函数中
    38     with tf.name_scope('wx_plus_b'):
    39         wx_plus_b = tf.matmul(x,W) + b
    40     with tf.name_scope('softmax'):
    41         prediction = tf.nn.softmax(wx_plus_b)
    42 
    43 #二次代价函数
    44 # loss = tf.reduce_mean(tf.square(y-prediction))
    45 with tf.name_scope('loss'):
    46     loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))
    47     tf.summary.scalar('loss',loss)      #观察loss值的变化
    48 with tf.name_scope('train'):
    49     #使用梯度下降法
    50     train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    51 
    52 #初始化变量
    53 init = tf.global_variables_initializer()
    54 
    55 with tf.name_scope('accuracy'):
    56     with tf.name_scope('correct_prediction'):
    57         #结果存放在一个布尔型列表中
    58         correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
    59     with tf.name_scope('accuracy'):
    60         #求准确率
    61         accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    62         tf.summary.scalar('accuracy',accuracy)  #观察准确率的变化
    63         
    64 #合并所有的summary:我们要观测的参数
    65 merged = tf.summary.merge_all()
    66 
    67 with tf.Session() as sess:
    68     sess.run(init)
    69     writer = tf.summary.FileWriter('logs/',sess.graph)
    70     for epoch in range(51):
    71         for batch in range(n_batch):
    72             batch_xs,batch_ys =  mnist.train.next_batch(batch_size)
    73             summary,_ = sess.run([merged,train_step],feed_dict={x:batch_xs,y:batch_ys})  #执行train_step的同时,也执行merged
    74         
    75         writer.add_summary(summary,epoch)       #写入文件里
    76         
    77         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    78         print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))

    首先定义了一个函数variable_summaries(),用来看数据(比如W,b参数)的平均值,标准差,最值和直方图。

    tf.summary.scalar('name',tensor)绘制变换的图表,第一项是字符命名,第二项是要记录跟踪的变量。

    tf.summary.merge_all对所有训练图进行合并打包,最后必须用sess.run一下打包的图,writer.add_summary添加相应的记录。

    二、Tensorboard中的结果:

    还有显示一些参数的最值,分布等。但是因为只迭代了50次,所以图中点数为50。下面将点数改成2000,循环程序更改为:

    1     for i in range(2001):
    2         batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    3         summary,_ = sess.run([merged,train_step],feed_dict={x:batch_xs,y:batch_ys})
    4         writer.add_summary(summary,i)
    5         if i%500 == 0:
    6             print(sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}))

    有时会出现以下错误:

    百度之后,说是因为当前路径不能有一个以上的events文件,所以将events文件删除,然后重新Restart&Run all之后,问题果真解决了。

    参考:https://www.cnblogs.com/fydeblog/p/7429344.html 中例三:线性拟合

     1 import tensorflow as tf
     2 import numpy as np
     3 
     4 #继续改进,试试其他功能:scalars,histograms,distributions
     5 with tf.name_scope('data'):
     6     #原始数据
     7     x_data = np.random.rand(100).astype(np.float32)
     8     y_data = 0.3*x_data + 0.1
     9 
    10 with tf.name_scope('parameters'):
    11     with tf.name_scope('weight'):
    12         weight = tf.Variable(tf.random_uniform([1],-1.0,1.0))
    13         tf.summary.histogram('weight',weight)                    #histogram
    14     with tf.name_scope('biases'):
    15         bias = tf.Variable(tf.zeros([1]))
    16         tf.summary.histogram('bias',bias)
    17     
    18 with tf.name_scope('y_prediction'):
    19     y_prediction = weight*x_data + bias
    20     
    21 with tf.name_scope('loss'):
    22     loss = tf.reduce_mean(tf.square(y_data-y_prediction))
    23     tf.summary.scalar('loss',loss)
    24     
    25 optimizer = tf.train.GradientDescentOptimizer(0.5)
    26 
    27 with tf.name_scope('train'):
    28     train = optimizer.minimize(loss)
    29     
    30 init = tf.global_variables_initializer()
    31 
    32 with tf.Session() as sess:
    33     sess.run(init)
    34     merged = tf.summary.merge_all()
    35     writer = tf.summary.FileWriter('logs/',sess.graph)
    36     for step in range(101):
    37         sess.run(train)
    38         rs = sess.run(merged)
    39         writer.add_summary(rs,step)

     2019-06-05 21:35:28

  • 相关阅读:
    [转]Sublime Text 3安装Json格式化插件
    Golang 新手可能会踩的 50 个坑【转】
    [golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量
    序列化是干什么的,有什么作用,什么情况下会用到?
    Hbase设置多个hmaster
    基于JMX动态配置Log4J日志级别
    面向过程与面向对象编程的区别和优缺点
    log4j自带的两个类MDC和NDC作用以及用途
    【架构师之路】集群/分布式环境下5种session处理策略
    Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
  • 原文地址:https://www.cnblogs.com/direwolf22/p/10982058.html
Copyright © 2011-2022 走看看