8、线性回归模型原理与实现(三)——增加损失值等变量的显示



1、目的:添加权重参数,损失值等后,在tensorboard观察变化的情况

(1)收集变量 (代码直接写在会话之前)
● tf.summary.scalar(name=",tensor) 收集对于损失函数和准确率等单值变量,name为变量的名字,tensor为值
● tf.summary.histogram(name=",tensor)收集高维度的变量参数
● tf.summary.image(name=",tensor)收集输入的图片张量能显示图片
1 # 1. 在会话之前收集变量,收集tensor
2 tf.summary.scalar("losses",loss)  #收集标量
3 tf.summary.histogram("weights",weights)
(2)合并变量写入事件文件 
① merged = tf.summary.merge_all()
② 运行合并: summary = sess.run(merged), 每次迭代都需运行
1 # 2. 定义合并tensor的op
2 merged = tf.summary.merge_all()
 ③ 添加: FileWriter.add_ summary(summary,i),i表示第几次的值
1 for i in range(FLAGS.max_step):
2     sess.run(train_op)
3 
4     # 1. 运行合并的tensor
5     summary = sess.run(merged)
6     # 2.加进filewriter中
7     fileWriter.add_summary(summary,i)
8 
9     print(("第%s次优化后的参数,权重为: %f, 偏置为: %f"%(i,weights.eval(),bias.eval())))

完整代码:

 1 import tensorflow as tf
 2 import os
 3 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #去掉警告,将警告级别提升
 4 def my_regression():
 5     """
 6     自实现一个线性回归预测
 7     :return:
 8     """
 9     with tf.variable_scope("data"):  #准备数据(即“data”)的作用域
10         # 1. 准备数据 [X, 特征值] 这里假设是100个样本,1个特征,即[100, 1],  目标值y是100个值,即[100]
11         x = tf.random_normal([100,1], mean=1.75, stddev=0.5, name="x_data")  #自己定义一个假的数据集
12         y_ture = tf.matmul(x, [[0.7]]) + 0.8    #矩阵相乘,w值必须设置成相应的维数
13 
14     with tf.variable_scope("model"): #模型的作用域
15         # 2. 建立线性回归模型 1个特征-->1个权重值, 一个偏置 y = x * w +b
16         # 随机给一个权重和偏置值, 然后计算损失函数,利用梯度下降在当前状态下优化损失函数
17         # 用变量定义才能优化
18         weights = tf.Variable(tf.random_normal([1,1],mean=0.0, stddev=1.0), name="w", trainable=True) #模型中的参数要用变量进行定义,在括号里面给一个随机的值,让模型从该值开始优化
19         bias = tf.Variable(0.0, name="b") #定义变量
20         y_predict = tf.matmul(x, weights) + bias #预测值
21 
22     with tf.variable_scope("loss"): #损失的作用域
23         # 3. 建立计算损失函数,均方误差
24         loss = tf.reduce_mean(tf.square(y_ture - y_predict))   #平方之后,相加再除以总数
25 
26     with tf.variable_scope("optimizer"): #优化的作用域
27         # 4. 梯度下降优化损失op (学习率: learning_rate)
28         train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)   #最小化损失 0.1是学习率(步长),自己调
29 
30     # 1. 在会话之前收集变量,收集tensor
31     tf.summary.scalar("losses",loss)  #收集标量
32     tf.summary.histogram("weights",weights)
33     # 2. 定义合并tensor的op
34     merged = tf.summary.merge_all()
35 
36     #定义一个初始化的op,对所有的变量进行初始化,这样才能在会话中进行打印
37     init_op = tf.global_variables_initializer()
38 
39    #通过会话运行程序(op)
40     with tf.Session() as sess:
41         #初始化变量
42         sess.run(init_op)
43         # 打印优化前的初始化值
44         print("随机初始化的参数,权重为: %f, 偏置为: %f"%(weights.eval(),bias.eval()))
45         #可视化,建立事件文件
46         fileWriter = tf.summary.FileWriter("E:/pythonprogram/deepLearning/base/visual/", graph=sess.graph)  # 有一个返回值
47         # 运行优化
48         for i in range(300):
49             sess.run(train_op)
50             # 1. 运行合并的tensor
51             summary = sess.run(merged)
52             # 2.加进filewriter中
53             fileWriter.add_summary(summary,i)
54             print(("第%s次优化后的参数,权重为: %f, 偏置为: %f"%(i,weights.eval(),bias.eval())))
55 
56 if __name__ == '__main__':
57     my_regression()

输出:

随机初始化的参数,权重为: 1.036833, 偏置为: 0.000000
第0次优化后的参数,权重为: 1.092212, 偏置为: 0.043446
第1次优化后的参数,权重为: 1.092914, 偏置为: 0.055006
第2次优化后的参数,权重为: 1.078629, 偏置为: 0.059111
        .
        .
        .
第297次优化后的参数,权重为: 0.711910, 偏置为: 0.778358
第298次优化后的参数,权重为: 0.711941, 偏置为: 0.778729
第299次优化后的参数,权重为: 0.711625, 偏置为: 0.778881
        

 

 


上一篇:OO unit4 summary


下一篇:summary plot 为每个样本绘制其每个特征的SHAP值