可视化Tensorboard应用
以上一篇简单的线性方程梯度下降代码为例
-------------------------------------------------------------
第1步:收集变量
#收集损失tensor
tf.compat.v1.summary.scalar(name='losses',tensor=loss)
#收集高维度的变量参数
tf.compat.v1.summary.histogram(name='weight',values=weight)
第2步:合并变量写入事件文件
merged=tf.compat.v1.summary.merge_all()
第3步:运行程序,生成文件
summary = sess.run(merged)
filewriter.add_summary(summary, i)#注意这里的filewriter为文件事件。filewriter=tf.compat.v1.summary.FileWriter('./tmp/test', sess.graph)
第4步:运行Tensorboard命令
tensorboard --logdir="./Main/tmp/test/" #注意这里用逗号来区别地址
第5步:查看效果
1 def myregression(): 2 #由于在tensofflow2.0以上的版本,eager execution 是默认开启的。如果不加此语句,直接运行程序将会报错 3 tf.compat.v1.disable_eager_execution() 4 ''' 5 自实现一个线性回归预测 6 :return: 7 ''' 8 #1.准备数据,x特征值[100,1],y目标值[100] 9 x=tf.compat.v1.random_normal([100,1],mean=1.75,stddev=0.5,name='x_data') 10 #假设y的真实值为y=0.7x+0.8,a的值随机给为0.7,b偏置的值随机给0.8 11 #矩阵相系必须是二维的,故[[0.7]] y_true为训练集数据 12 y_true=tf.matmul(x,[[0.7]])+0.8 13 14 #第二步:建立线性回归模型。确认了只有一个特征,故只有一个权重,一个偏置 y= w x+b 15 #随机给一个权重和偏置的值,让他去计算损失,然后当前状态下优化 16 #因为权重训练的过程中,不断变化,故初始化用的是variable.mean和stddev随机给为0.0,1.0 17 weight=tf.Variable(tf.compat.v1.random_normal([1,1],mean=0.0,stddev=1.0,name='w')) 18 #偏置初始值为0.0,后面下降时不断+1 19 bias=tf.Variable(0.0,name='b') 20 #预测的结果=x * weight +bias 21 y_predict=tf.matmul(x,weight)+bias 22 23 #3、建立损失波函数,均方误差.--先求每个样本的误差的平方,然后将误差平方进行求和之后求平均值。 即全部相减求平方之后再相加的总数再除以样本数 24 #最后返回其损失 25 loss=tf.math.reduce_mean(tf.math.square(y_true-y_predict)) 26 #收集损失tensor 27 tf.compat.v1.summary.scalar(name='losses',tensor=loss) 28 #收集高维度的变量参数 29 tf.compat.v1.summary.histogram(name='weight',values=weight) 30 merged=tf.compat.v1.summary.merge_all() 31 #4、梯度下降优化损失 learning_rate随机指定.最小化损失.返回op 32 train_op=tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss) 33 34 #定义一个初始化变量的op 35 init_op=tf.compat.v1.global_variables_initializer() 36 #通过会话运行程序 37 with tf.compat.v1.Session() as sess: 38 #初始化变量 39 sess.run(init_op) 40 #打印随机最先初始化的权重和偏置 41 print('随机初始化的参数权重为:%f,偏置为%f'%(weight.eval(),bias.eval()))#因为weigth和bias都为op,不能直接调出数值 42 43 #运行优化,由于不是一次性能优化,故要循环,假设训练100次 44 #循环1000次后,发现已经靠近w--0.7,b==0.8 45 filewriter=tf.compat.v1.summary.FileWriter('./tmp/test', sess.graph) 46 for i in range(1010): 47 sess.run(train_op) 48 print('参数权重为:%f,偏置为%f' % (weight.eval(), bias.eval())) # 因为weigth和bias都为op,不能直接调出数值 49 # 运行merged op 50 summary = sess.run(merged) 51 filewriter.add_summary(summary, i) 52 53 return None