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