持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
注意:本文使用tensorflow1.x版本进行演示
使用本地Jupyter Notebook搭载TensorFlow相关库进行操作
本文主要任务是继续完成Tensorflow线性回归案例开发,在训练好的模型基础上继续完善,为变量增加命名空间,使得代码本身结构更加清晰,同时也能够使得TensorBoard图结构更容易理解。
1. 增加命名空间
我们想为变量增加命名空间可以使用tf.variable_scope()可以修改命名空间,就会在指令名称之前出现你想要的命名。
- 能够在OP的名字前面增加命名空间的指定名字
()中添加你想要的命名- 在创建变量时,开启变量命名空间,可以使得图更加清晰
- 因此对于不同的变量,可以分别开启不同的命名空间
2. 修改指令名称
在定义变量与常量数据的时候,在括号中的name部分赋予名称,即可修改指令名称。
例如:X = tf.random_normal(shape=[100,1], name="feature")为X值赋予指令名称"feature"
3. 代码演示
我们在上一篇文章的基础上,为代码进行完善,增加指令名称与命名空间,从而使得过程更加清晰,可视化结果更加一目了然。
具体代码演示如下所示:
- 我们将添加4个命名空间
- 为数据准备添加命名空间
- 为模型构造添加命名空间
- 为损失函数添加命名空间
- 为优化损失添加命名空间
def linear_regression():
"""
实现线性回归
"""
with tf.variable_scope("prepare_data"):
# 1.1 准备数据
X = tf.random_normal(shape=[100,1], name="feature")
y_true = tf.matmul(X, [[0.5]]) + 1 # matmul矩阵运算
with tf.variable_scope("create_model"):
# 1.2 模型构造
# 定义模型参数
# 用变量来定义
weights = tf.Variable(initial_value=tf.random_normal(shape=[1,1]), name="Weights") # 需要给一个初始设置:正态分布随机初始值;一行一列
bias = tf.Variable(initial_value=tf.random_normal(shape=[1,1]), name="Bias")
y_predict = tf.matmul(X, weights) + bias
with tf.variable_scope("loss_function"):
# 1.3 损失函数
error = tf.reduce_mean(tf.square(y_predict-y_true))
with tf.variable_scope("optimizier"):
# 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()
运行结果在当前目录下的/File/linear文件夹中-生成了新的事件文件,使用Tensorboard将其打开,可视化结果如下所示:
点开create_model节点,可视化如下所示:
由下图可以看出,从prepare_data流过来的样本值x,到了create_data节点与weight进行相乘,相乘结果与Bias进行相加得到的结果流向loss_function。有了命名空间和指令名称以后,使得TensorBoard可视化图像更加清晰,一目了然。