ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-11-15 10:02:16  阅读:263  来源: 互联网

标签:偏置 变量 模型 summary tf weights 线性 op tensor




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
        

 

 


标签:偏置,变量,模型,summary,tf,weights,线性,op,tensor
来源: https://www.cnblogs.com/pengzhonglian/p/11864512.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有