其他分享
首页 > 其他分享> > Visualization of Tensorflow

Visualization of Tensorflow

作者:互联网

Table of Contents

第七章 Tensorboard可视化图及训练

       TensorboardTensorboard可以用来可视化图和训练曲线,可以帮助识别图的错误及瓶颈。下面以最小批量梯度下降算法为例探究Tensorboard的使用。

7.1 过程记录

  1. 导入包

       所用包与之前类似,额外导入datatime包,方便使用系统时间命名日志文件,具体代码如下:

 import tensorflow as tf
 import numpy as np
 from sklearn.datasets import fetch_california_housing
 from sklearn.preprocessing import StandardScaler
 from datetime import datetime
  1. 数据处理

       将数据下载,整理并做预处理。

housing = fetch_california_housing()
m,n = housing.data.shape # 获取数据的行列数
housing_data_plus_bias = np.c_[np.ones((m,1)),housing.data] # 为数据添加偏差项, 即添加y=ax+b中的b,其中b为1

# 数据预处理,归一化
scaler = StandardScaler().fit(housing_data_plus_bias)
scaled_housing_data_plus_bias = scaler.transform(housing_data_plus_bias)
  1. 设置日志文件

       定义日志文件目录,每次运行时指定不同的日志文件,否则Tensorboard会自动将同目录下同名文件合并,导致可视化结果混乱。所以最方便的命名方法是利用本地时间戳进行命名。

now = datetime.utcnow().strftime("%Y%m%d%H%M%S")
root_logdir = "tf_logs"
logdir = "{}/run-{}/".format(root_logdir,now)
# # 以下代码放置在构造期最后  
# mse_summary = tf.summary.scalar('MSE',mse)  
# file_writer = tf.summary.FileWriter(logdir, tf.get_default_graph())
  1. 创建计算图(构造期)

       将图的定义与训练状态(汇总)写入Tensorboard需要读取的日志文件中。

X = tf.placeholder(tf.float32, shape=(None, n+1), name="X")
y = tf.placeholder(tf.float32, shape=(None, 1), name="y")
n_epochs = 1000
batch_size = 100
n_batches= int(np.ceil(m/batch_size))
global_learning_rate = 0.01
XT = tf.transpose(X)
theta = tf.Variable(tf.random_uniform([n+1,1],-1.0,1.0),name="theta")     # * 参数 seed=42
y_pred =  tf.matmul(X, theta, name="prediction")                          # 预测值
error = y_pred-y                                                          # 误差
mse = tf.reduce_mean(tf.square(error), name="mse")                        # 均方误差(成本函数)
## 定义优化器(梯度下降)
optimizer = tf.train.GradientDescentOptimizer(learning_rate =   global_learning_rate)
training_op = optimizer.minimize(mse) 
## 定义汇总
mse_summary = tf.summary.scalar('MSE',mse)                                # 创建了用来求MSE值的节点,并将其写入称为汇总(summary)的二进制日志字符串中  
file_writer = tf.summary.FileWriter(logdir, tf.get_default_graph())       # 创建一个将汇总写入日志目录的file_writer
  1. 创建会话(执行期)

       在训练时定期对mse_summary节点求值,将汇总信息输出,并利用file_writer将其写入事件文件(日志文件)。

init = tf.global_variables_initializer()                                  # 添加初始化节点
def fetch_batch(epoch, batch_index, batch_size):
# 随机分组
   np.random.seed(epoch * n_batches + batch_index) 
   indices = np.random.randint(m, size=batch_size)
   X_batch = scaled_housing_data_plus_bias[indices] 
   y_batch = housing.target.reshape(-1, 1)[indices] 
 return X_batch, y_batch  

with tf.Session() as sess:
   sess.run(init)
   for epoch in range(n_epochs):
       for batch_index in range(n_batches):
           X_batch, y_batch = fetch_batch(epoch, batch_index, batch_size)
          # 将均方误差mse写入日志文件
          if batch_index % 10 == 0:
              summary_str = mse_summary.eval(feed_dict={X:X_batch, y:y_batch})
              step = epoch * n_batches + batch_index
              file_writer.add_summary(summary_str, step)
             
sess.run(training_op, feed_dict={X:X_batch, y:y_batch})
best_theta = theta.eval()
print("The best theta is", best_theta)
file_writer.close()
  1. 运行结果

       运行会话后输出最终参数值并在目录./tf_logs/run-20190410073421下(目录名即系统时间戳)生成文件events.out.tfevents.1561521973.BaoDadeMacBook-Pro.local

  1. 启动Tensorboard服务器

       可以通过多种方式启动Tensorboard服务,可以通过virtualenv新建一个虚拟环境并启动Tensorboard,也可以在当前目录下直接启动Tensorboard,个人感觉两者并无太大差别,只要保证启动Tensorboard服务的目录一样就好。

  1. 查看训练状态

       由终端提示TensorBoard 1.13.1 at ...local:6006可知Tensorboard服务已启动并在6006端口监听,在浏览器中输入loclahost:6006可查看Tensorboard的监听界面如下:
[外链图片转存失败(img-bwpdS370-1562123625172)(Pictures/Tensorboard_1.png)]

图9-1.TensordBoard监听界面
  1. 使用Tensorboard

       再次运行之前的代码,将产生新的日志文件。关于Tensorboard的使用可参见图9-2和图9-3。
[外链图片转存失败(img-X0MLoz0j-1562123625174)(Pictures/Tensorboard_Event.png)]

图9-2.训练过程

在这里插入图片描述
图9-3.图结构

7.2 参考

[1] Geron.机器学习实战

标签:Visualization,housing,batch,summary,Tensorboard,tf,Tensorflow,mse
来源: https://blog.csdn.net/lrglgy/article/details/94554006