持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情
1. 案例回顾
上一篇文章我们搭建了完整线性回归模型并进行1000轮训练,达到了较为不错的效果。本文将主要介绍在完整机器学习中的其他功能与流程,比如将训练损失可视化,Tensorboard显示变量,自定义增加命名空间,模型保存等等。
2. 增加变量显示
在TensorBoard当中观察模型的参数、损失值等变量值的变化。不同的数据要用不同的方式去收集,比如标量数据用.scalar
,高维度数据用.histogram
等。
收集变量:
tf.summary.scalar(name='', tensor)
收集对于损失函数和准确率等单值变量(标量),name为变量的名字,tensor为值。tf.summary.histogram(name='', tensor)
收集高维度的变量参数(权重和偏置变化状况)tf.summary.image(name='', tensor)
收集输入的图片张量能显示图片
合并变量写入事件文件
- merged=tf.summary.merge_all():将权重偏置都搜集到一起
- 运行合并:summary = sess.run(merged),每次迭代都需在会话中运行
- 添加:FileWriter.add_summary(summary, i)i表示第几次的值,将summary对象写入到事件文件中
3. 代码演示
步骤1:导入所需库
import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
步骤2:线性回归并收集变量
- 我们在
./File/linear
目录下创建了事件文件,用来保存变量中间结果 - 需要在训练时的每一次循环后将变量写入事件
- 本案例演示中,主要用到收集变量与变量合并写入事件,最终得到可视化结果
- 主要流程为:
- 创建事件
- 收集变量
- 合并变量
- 写入变量
def linear_regression():
"""
实现线性回归
"""
# 1.1 准备数据
X = tf.random_normal(shape=[100,1])
y_true = tf.matmul(X, [[0.5]]) + 1 # matmul矩阵运算
# 1.2 模型构造
# 定义模型参数
# 用变量来定义
weights = tf.Variable(initial_value=tf.random_normal(shape=[1,1])) # 需要给一个初始设置:正态分布随机初始值;一行一列
bias = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))
y_predict = tf.matmul(X, weights) + bias
# 1.3 损失函数
error = tf.reduce_mean(tf.square(y_predict-y_true))
# 1.4 优化损失
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
# 2) 收集变量
tf.summary.scalar("error", error)
tf.summary.histogram("weights", weights)
tf.summary.histogram("bias", bias)
# 3) 合并变量
merged = tf.summary.merge_all()
# 2. 初始化变量
init = tf.global_variables_initializer()
# 3. 开启会话
with tf.Session() as sess:
sess.run(init)
# 1) 创建事件文件
file_writer = tf.summary.FileWriter("./File/linear", graph=sess.graph)
# 查看初始化模型参数的值
print("训练前模型参数为:权重%f, 偏置%f, 损失%f" %(weights.eval(), bias.eval(), error.eval()))
# 4. 开始训练
for i in range(1000):
sess.run(optimizer)
print("第%d次训练后模型参数为:权重%f, 偏置%f, 损失%f" %(i+1, weights.eval(), bias.eval(),error.eval()))
# 运行合并变量操作
summary = sess.run(merged)
# 将每次迭代后的变量写入事件文件
file_writer.add_summary(summary, i)
return None
linear_regression()
经过1000轮训练得到的结果如下图所示:
步骤3:TensorBoard可视化
同时,我们还在当前目录下建立了新的目录,File/linear。在这个目录下记录了变量的变化过程,我们可以使用Tensorboard将其打开,查看可视化训练过程。
File文件中是刚才保存变量的事件,需要Tensorboard将其打开查看。
需要我们打开anaconda promp,然后在其中进入到安装tensorflow的虚拟环境中。进入到事件所在上级目录。
cd 文件保存上级目录path
tensorboard --logdir=./File/linear/
可视化图结果如下所示:
模型损失变化图如下所示:
权重weight与偏置bias项变化过程如下所示:
权重weight与偏置bias分布直方图如下所示: