[TensorBoard] *Cookbook - Tensorboard
Ref: https://www.tensorflow.org/get_started/summaries_and_tensorboard
可视化对于Training的重要性,不言而喻。
代码示范
- # -*- coding: utf-8 -*-
- # Using Tensorboard
- #----------------------------------
- #
- # We illustrate the various ways to use
- # Tensorboard
- import os
- import io
- import time
- import numpy as np
- import matplotlib.pyplot as plt
- import tensorflow as tf
- # Initialize a graph session
- sess = tf.Session()
- # Create a visualizer object
- summary_writer = tf.train.SummaryWriter('tensorboard', tf.get_default_graph())
- # Create tensorboard folder if not exists
- if not os.path.exists('tensorboard'):
- os.makedirs('tensorboard')
- print('Running a slowed down linear regression. '
- 'Run the command: $tensorboard --logdir="tensorboard" '
- ' Then navigate to http://127.0.0.0:6006')
- # You can also specify a port option with --port 6006
- # Wait a few seconds for user to run tensorboard commands
- time.sleep(3)
- # Some parameters
- batch_size = 50
- generations = 100
- # Create sample input data
- x_data = np.arange(1000)/10.
- true_slope = 2.
- y_data = x_data * true_slope + np.random.normal(loc=0.0, scale=25, size=1000)
- 【构造好了ground true数据】
- # Split into train/test
- train_ix = np.random.choice(len(x_data), size=int(len(x_data)*0.9), replace=False)
- test_ix = np.setdiff1d(np.arange(1000), train_ix) # 提取出setdiff1d不同的部分(only index)
- x_data_train, y_data_train = x_data[train_ix], y_data[train_ix]
- x_data_test, y_data_test = x_data[test_ix ], y_data[test_ix ]
- # Declare placeholders 加载样本的容器
- x_graph_input = tf.placeholder(tf.float32, [None])
- y_graph_input = tf.placeholder(tf.float32, [None])
- # Declare model variables
- m = tf.Variable(tf.random_normal([1], dtype=tf.float32), name='Slope')
- # Declare model: Input layer + weight --> value of next layer
- output = tf.mul(m, x_graph_input, name='Batch_Multiplication')
- # Declare loss function (L1)
- residuals = output - y_graph_input # 联想到了 "深度残差网络" 何凯明,减小均值
- l2_loss = tf.reduce_mean(tf.abs(residuals), name="L2_Loss")
- # Declare optimization function
- my_optim = tf.train.GradientDescentOptimizer(0.01) # 通过这个solver缩小loss
- train_step = my_optim.minimize(l2_loss)
- # Visualize a scalar
- with tf.name_scope('Slope_Estimate'):
- tf.scalar_summary('Slope_Estimate', tf.squeeze(m))
- # Visualize a histogram (errors)
- with tf.name_scope('Loss_and_Residuals'):
- tf.histogram_summary('Histogram_Errors', l2_loss)
- tf.histogram_summary('Histogram_Residuals', residuals)
- # Declare summary merging operation
- summary_op = tf.merge_all_summaries()
【op操作各种各样,所以需要有个汇总的op操作】- # Initialize Variables
- init = tf.initialize_all_variables()
- sess.run(init)
- for i in range(generations):
- batch_indices = np.random.choice(len(x_data_train), size=batch_size)
- x_batch = x_data_train[batch_indices]
- y_batch = y_data_train[batch_indices]
- _, train_loss, summary = sess.run([train_step, l2_loss, summary_op],
- feed_dict={x_graph_input: x_batch, y_graph_input: y_batch})
- test_loss, test_resids = sess.run([l2_loss, residuals], feed_dict={x_graph_input: x_data_test, y_graph_input: y_data_test})
- if (i+1)%10==0:
- print('Generation {} of {}. Train Loss: {:.3}, Test Loss: {:.3}.'.format(i+1, generations, train_loss, test_loss))
- log_writer = tf.train.SummaryWriter('tensorboard')
- log_writer.add_summary(summary, i)
- time.sleep(0.5)
- #Create a function to save a protobuf bytes version of the graph
- def gen_linear_plot(slope):
- linear_prediction = x_data * slope
- plt.plot(x_data, y_data, 'b.', label='data')
- plt.plot(x_data, linear_prediction, 'r-', linewidth=3, label='predicted line')
- plt.legend(loc='upper left')
- buf = io.BytesIO()
- plt.savefig(buf, format='png')
- buf.seek(0)
- return(buf)
- # Add image to tensorboard (plot the linear fit!)
- slope = sess.run(m)
- plot_buf = gen_linear_plot(slope[0])
- # Convert PNG buffer to TF image
- image = tf.image.decode_png(plot_buf.getvalue(), channels=4)
- # Add the batch dimension
- image = tf.expand_dims(image, 0)
- # Add image summary
- image_summary_op = tf.image_summary("Linear Plot", image)
- image_summary = sess.run(image_summary_op)
- log_writer.add_summary(image_summary, i)
- log_writer.close()
查看网络结构
实时跟踪权重
Ref: http://www.jianshu.com/p/52e773d47338
- tensorboard --logdir results --reload_interval 5
【默认的 reload_interval 是120秒,以避免在计算机上面太快统计,但是在我们的情况下,我们可以安全地加速一点】
06:Tensorflow的可视化工具Tensorboard的初步使用
小姑娘整理的不错,之后二次整理一下。
[TensorBoard] *Cookbook - Tensorboard的更多相关文章
- [TensorBoard] Train and Test accuracy simultaneous tracking
训练时的实时状态跟踪的重要性 不言而喻. [Tensorboard] Cookbook - Tensorboard 讲解调节更新频率 直接上代码展示: import numpy as np impo ...
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- tensorflow笔记(三)之 tensorboard的使用
tensorflow笔记(三)之 tensorboard的使用 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7429344.h ...
- 机器学习笔记4-Tensorflow线性模型示例及TensorBoard的使用
前言 在上一篇中,我简单介绍了一下Tensorflow以及在本机及阿里云的PAI平台上跑通第一个示例的步骤.在本篇中我将稍微讲解一下几个基本概念以及Tensorflow的基础语法. 本文代码都是基于A ...
- 【keras】用tensorboard监视CNN每一层的输出
from keras.models import Sequential from keras.layers import Dense, Dropout from keras.layers import ...
- windows tensorboard http://0.0.0.0:6006 无法访问 解决方法 - using chrome and localhost as ip
启动命令: tensorboard --logdir="tensorboard" 启动后显示 Starting TensorBoard b'47' at http://0.0.0. ...
- TensorFlow基础笔记(9) Tensorboard可视化显示以及查看pb meta模型文件的方法
参考: http://blog.csdn.net/l18930738887/article/details/55000008 http://www.jianshu.com/p/19bb60b52dad ...
- tensorboard实现tensorflow可视化
1.工程目录 2.data.input_data.py的导入 在tensorflow更新之后可以进行直接的input_data的导入 # from tensorflow.examples.tutori ...
- windows平台tensorboard的配置及使用
由于官网和其他教程里面都是以Linux为平台演示tensorboard使用的,而在Windows上与Linux上会有一些差别,因此我将学习的过程记录下来与大家分享(基于tensorflow1.2.1版 ...
随机推荐
- unity无限循环报错的定位
晚上遇到了,碰到了程序一运行就卡住的尴尬问题,然后百度下,看了看,Get到了一个新的skill. 1. 打开对应的VS程序,选择“调试/Attach Unity Debuger”菜单来调试代码. 2. ...
- JNI编程实现(Linux)
JNI是Java Native Interface的缩写,是Java平台的本地调用,从Java1.1就成为了Java标准的一部分,它允许Java代码和其它语言的代码进行互相调用,只要调用约定支持即可, ...
- Ubuntu GNOME 13.04将关闭窗口的按钮放在最右边
转载请注明:转自http://blog.csdn.net/u010811449/article/details/9426187 先上图: 首先打开dconf系统配置编译器. 找到 rog -> ...
- Java全栈程序员之01:做个Linux下的程序猿
Windows10正在成为史上口碑最差的Windows系统 (图侵删) 我曾经花了数次1小时去寻找解决方案去关闭自动更新,包括停掉服务.修改注册表等等.但是都没有成功. 微软自身是知道这个问题的,但就 ...
- 递归与迭代的联系以及优缺点(以c++为例)
1.递归的定义: 程序直接或间接的调用自身的方法. 递归算法的特点:(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口.(3) 递归算法解题通 ...
- 几种php加速器比较
一.PHP加速器介绍 PHP加速器是一个为了提高PHP执行效率,从而缓存起PHP的操作码,这样PHP后面执行就不用解析转换了,可以直接调用PHP操作码,这样速度上就提高了不少. Apache中使用mo ...
- ubuntu 登陆信息打印 -- motd
新需求需要改变 Ubuntu 启动时的登录信息打印,根据搜索到的资料,找到了这里: luo[~]ssh luo@192.168.100.233 Press ^@ (C-Space) to enter ...
- 详解CentOS设置163的yum源的过程
转自启动CentOS系统,打开火狐浏览器,如下图所示: 2 登录“mirrors.163.com”,如下图所示: 3 点击centos后面的“centos使用帮助”,如下图所示: 4 可以看到设置和使 ...
- 【微信上传素材接口--永久性】微信永久性上传、获取返回的medie_id 和url
上传图片到微信服务器获得media_id和url (永久性) 其他接口类:https://www.cnblogs.com/gjw-hsf/p/7375261.html 转载地址:https://blo ...
- javascript回调函数笔记
来源于:https://github.com/useaname/blog-study 在Javascript中,函数是第一类对象.意味函数可以像对象一样按照第一类被管理使用.回调函数是从一个叫函数式编 ...