1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Nov 1 17:51:28 2018
  4.  
  5. @author: zhen
  6. """
  7.  
  8. import tensorflow as tf
  9. from tensorflow.examples.tutorials.mnist import input_data
  10.  
  11. max_steps = 1000
  12. learning_rate = 0.001
  13. dropout = 0.9
  14. data_dir = 'C:/Users/zhen/MNIST_data_bak/'
  15. log_dir = 'C:/Users/zhen/MNIST_log_bak/'
  16.  
  17. mnist = input_data.read_data_sets(data_dir, one_hot=True) # 加载数据,把数据转换成one_hot编码
  18. sess = tf.InteractiveSession() # 创建内置sess
  19.  
  20. with tf.name_scope('input'):
  21. x = tf.placeholder(tf.float32, [None, 784], name='x-inpupt')
  22. y_ = tf.placeholder(tf.float32, [None, 10], name='y-input')
  23.  
  24. with tf.name_scope("input_reshape"):
  25. image_shaped_input = tf.reshape(x, [-1, 28, 28, 1])
  26. tf.summary.image('input', image_shaped_input, 10) # 输出包含图像的summary,该图像有四维张量构建,用于可视化
  27.  
  28. # 定义神经网络的初始化方法
  29. def weight_variable(shape):
  30. initial = tf.truncated_normal(shape, stddev=0.1) #从截断的正态分布中输出随机值,类似tf.random_normal从正态分布中输出随机值
  31. return tf.Variable(initial)
  32.  
  33. def bias_variable(shape):
  34. initial = tf.constant(0.1, shape=shape)
  35. return tf.Variable(initial)
  36.  
  37. # 定义Variable变量的数据汇总函数
  38. def variable_summaries(var):
  39. with tf.name_scope('summaries'):
  40. mean = tf.reduce_mean(var) # 求平均值
  41. tf.summary.scalar('mean', mean) # 输出一个含有标量值的summary protocal buffer,用于可视化
  42. with tf.name_scope('stddev'):
  43. stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
  44. tf.summary.scalar('stddev', stddev)
  45. tf.summary.scalar('max', tf.reduce_max(var))
  46. tf.summary.scalar('min', tf.reduce_min(var))
  47. tf.summary.histogram('histogram', var) # 用于显示直方图信息
  48.  
  49. # 创建MLP多层神经网络
  50. def nn_layer(input_tensor, input_dim, output_dim, layer_name, act=tf.nn.relu):
  51. with tf.name_scope(layer_name):
  52. with tf.name_scope('weights'):
  53. weights = weight_variable([input_dim, output_dim])
  54. variable_summaries(weights)
  55. with tf.name_scope('biases'):
  56. biases = bias_variable([output_dim])
  57. variable_summaries(biases)
  58. with tf.name_scope('Wx_plus_b'):
  59. preactivate = tf.matmul(input_tensor, weights) + biases # 矩阵乘
  60. tf.summary.histogram('pre_activations', preactivate)
  61. activations = act(preactivate, name='activation') # 激活函数relu
  62. tf.summary.histogram('activations', activations)
  63. return activations
  64.  
  65. hidden1 = nn_layer(x, 784, 500, 'layer1')
  66.  
  67. with tf.name_scope('dropout'):
  68. keep_prob = tf.placeholder(tf.float32)
  69. tf.summary.scalar('dropout_keep_probability', keep_prob)
  70. dropped = tf.nn.dropout(hidden1, keep_prob) # 训练过程中随机舍弃部分神经元,为了防止或减轻过拟合
  71.  
  72. y = nn_layer(dropped, 500, 10, 'layer2', act=tf.identity)
  73.  
  74. with tf.name_scope('scross_entropy'):
  75. diff = tf.nn.softmax_cross_entropy_with_logits(logits=y, labels=y_) # 求交叉熵
  76. with tf.name_scope('total'):
  77. cross_entropy = tf.reduce_mean(diff)
  78. tf.summary.scalar('cross_entropy', cross_entropy)
  79.  
  80. with tf.name_scope('train'):
  81. train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy) #Adam优化算法,全局最优,引入了二次方梯度矫正
  82. with tf.name_scope('accuracy'):
  83. with tf.name_scope('accuracy'):
  84. correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
  85. with tf.name_scope('accuracy'):
  86. accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
  87.  
  88. tf.summary.scalar('accuracy', accuracy)
  89.  
  90. merged = tf.summary.merge_all() # 整合之前定义的所有summary,在此处才开始执行,summary为延迟加载
  91. train_writer = tf.summary.FileWriter(log_dir + '/train', sess.graph)
  92. test_writer = tf.summary.FileWriter(log_dir + '/test') # 可视化数据存储在日志文件中
  93. tf.global_variables_initializer().run()
  94.  
  95. def feed_dict(train):
  96. if train:
  97. xs, ys = mnist.train.next_batch(100)
  98. k = dropout
  99. else:
  100. xs, ys = mnist.test.images, mnist.test.labels
  101. k = 1.0
  102. return {x:xs, y_:ys, keep_prob:k}
  103.  
  104. saver = tf.train.Saver()
  105. for i in range(max_steps):
  106. if i % 100 == 0:
  107. summary, acc = sess.run([merged, accuracy], feed_dict(False))
  108. test_writer.add_summary(summary, i)
  109. print('Accuray at step %s:%s' % (i, acc))
  110. else:
  111. if i % 100 == 99:
  112. run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) # 定义TensorFlow运行选项
  113. run_metadata = tf.RunMetadata() # 定义TensorFlow运行元信息,记录训练运行时间及内存占用等信息
  114. summary, _ = sess.run([merged, train_step], feed_dict=feed_dict(True))
  115. train_writer.add_run_metadata(run_metadata, 'stp%03d' % i)
  116. train_writer.add_summary(summary, 1)
  117. saver.save(sess, log_dir + 'model.ckpt', i)
  118. else:
  119. summary, _ = sess.run([merged,train_step], feed_dict=feed_dict(True))
  120. train_writer.add_summary(summary, i)
  121.  
  122. train_writer.close()
  123. test_writer.close()

  程序执行完成后,在dos命令窗口或linux窗口运行命令,参数logdir是你程序保存log日志设置的地址。

效果如下:

结果:

  

  

  一层神经网络:

  

  二层神经网络:

  

  神经网络计算图:

  

  神经元输出的分布:

    

  数据分布直方图:
      

  数据可视化:

    

基于TensorFlow进行TensorBoard可视化的更多相关文章

  1. 学习TensorFlow,TensorBoard可视化网络结构和参数

    在学习深度网络框架的过程中,我们发现一个问题,就是如何输出各层网络参数,用于更好地理解,调试和优化网络?针对这个问题,TensorFlow开发了一个特别有用的可视化工具包:TensorBoard,既可 ...

  2. Tensorflow 之 TensorBoard可视化Graph和Embeddings

    windows下使用tensorboard tensorflow 官网上的例子程序都是针对Linux下的:文件路径需要更改 tensorflow1.1和1.3的启动方式不一样 :参考:Running ...

  3. Tensorflow细节-Tensorboard可视化-简介

    先搞点基础的 注意注意注意,这里虽然很基础,但是代码应注意: 1.从writer开始后边就错开了 2.writer后可以直接接writer.close,也就是说可以: writer = tf.summ ...

  4. Tensorflow学习笔记3:TensorBoard可视化学习

    TensorBoard简介 Tensorflow发布包中提供了TensorBoard,用于展示Tensorflow任务在计算过程中的Graph.定量指标图以及附加数据.大致的效果如下所示, Tenso ...

  5. 超简单tensorflow入门优化程序&&tensorboard可视化

    程序1 任务描述: x = 3.0, y = 100.0, 运算公式 x×W+b = y,求 W和b的最优解. 使用tensorflow编程实现: #-*- coding: utf-8 -*-) im ...

  6. TensorFlow(八):tensorboard可视化

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from tensorflow.c ...

  7. TensorFlow从0到1之TensorBoard可视化数据流图(8)

    TensorFlow 使用 TensorBoard 来提供计算图形的图形图像.这使得理解.调试和优化复杂的神经网络程序变得很方便.TensorBoard 也可以提供有关网络执行的量化指标.它读取 Te ...

  8. 基于TensorFlow的深度学习系列教程 1——Hello World!

    最近看到一份不错的深度学习资源--Stanford中的CS20SI:<TensorFlow for Deep Learning Research>,正好跟着学习一下TensorFlow的基 ...

  9. 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(二)

    前言 已完成数据预处理工作,具体参照: 基于TensorFlow Object Detection API进行迁移学习训练自己的人脸检测模型(一) 设置配置文件 新建目录face_faster_rcn ...

随机推荐

  1. 批量去除文件的BOM头

    <?php class KillBom{ //定义扩展名 public static $m_ext = ['txt','php','js','css']; /** * 传入一个任意文件,自动区分 ...

  2. Java NIO中的缓冲区Buffer(二)创建/复制缓冲区

    创建缓冲区的方式 主要有以下两种方式创建缓冲区: 1.调用allocate方法 2.调用wrap方法 我们将以charBuffer为例,阐述各个方法的含义: allocate方法创建缓冲区 调用all ...

  3. 从零开始学 Web 之 CSS(二)文本、标签、特性

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  4. Spring Cloud Gateway入门

    1.什么是Spring Cloud GatewaySpring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技 ...

  5. EOS多节点组网:商业场景分析以及节点启动时序

    区块链公链都是基于p2p网络,本篇文章将建立一个多节点不同职责参与的EOS的测试网络,根据路上发现的可做文章的技术点大做文章. 关键字:EOS组网,全节点,交易确认,boot sequence,sta ...

  6. SpringBoot---基本配置

    1.首先在pom.xml添加对HTML的相关依赖 /** * pom.xml文件 */ <dependencies> <dependency> <groupId>o ...

  7. mysql主从复制总结

    第一步:开启所有MYSQL服务器的BIN日志,每台服务器设置一个唯一的server-id的值(默认是1,一般取IP最后一段) 修改主服务器(master)的my.cnf [mysqld] log-bi ...

  8. mysql存储引擎选择(转)

    MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系.由于各存储引擎功能特性差异较大,这篇文 ...

  9. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  10. VUE + ElementUI 从搭建到运行

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 前言:本文简洁的描述VUE + ElementUI 从搭建到运行,可以根据本文先搭建出可运行的项目,然后再详细回顾每个步骤所做的事: ...