到目前为止,我们就会感觉TensorFlow就像一个黑盒子,调用一些东西就能得到结果,但是我们却看不到他的内部长什么样子。
在使用TensorFlow过程中,实际上他有两套语言两套变量,一套是用Python、前端语言定义的程序,另一套是真正在TensorFlow上执行的程序,那我们能不能通过什么方法看到TensorFlow平台上的执行过程呢?接下来就让我们学习——tensorboard可视化
什么是可视化
- 可视化是用来查看在tensorflow平台下程序运行的过程,包括张量/变量、操作、数据流、学习过程等,从而方便tensorflow程序的理解,调试与优化。
- tensorflow提供了专门的可视化工具tensorboard,他将tensorflow执行的数据、模型、过程用图形方式进行显示。TensorFlow在执行过程中,可以通过某些操作,将模型、数据、graph等信息,保存到磁盘中events文件中去,从而提供给tensorboard进行可视化。
启动tensorboard
1.首先利用cmd cd指令一步一步进入到python中的Scrips文件中
2.tensorboard. exe --logdir="事件文件路径"
事件文件指你要执行那个文件,那个就是事件文件
还有在python中反斜杠有特殊含义,路径中最好用双斜杠
启动成功提示
进入tensorboard输入localhost:127.0.0.1.6006
案例1:为操作添加可视化
import tensorflow as tf
import os
#.创建一组操作
a = tf. constant([1, 2, 3, 4, 5])
var = tf. Variable(tf. random_normal([2, 3], mean = 0. 0, stddev = 1. 0), name = "var")
b = tf. constant(3. 0, name = "a")
c = tf. constant(4. 0, name = "b")
d = tf. add(b, c, name = "add")
#显式初始化
init_op = tf. global_variables_initializer()
with tf. Session as sess:
sess. run(init_op)
#将当前session的graph信息写入事件文件
fw = tf. summary. FileWriter(".. /summary/", graph = sess. graph)
print(sess. run[a, var, d])
摘要与事件文件操作
如果需要将变量/张量在tensorboard中显示,需要执行一下两步:
1.收集变量
tf. summary. scalar(name, tensor)#收集标量,name为名字,tensor为值
tf. summary. histogram(name, tensor)#收集高纬度变量参数
tf. summary. image(name, tensor)#收集图片张量
2.合并变量并写入事件文件
merged = tf. summary. merge_all()#合并所有变量(将所有收集到的数据转换为可以存储到文件中的格式)
summary = sess. run(merged)#运行合并,每次迭代训练都需要执行
FileWriter. add_summary(summary, i)#添加摘要,i表示第几次的值
综合案例:实现线性回归
- 任务描述
-给定一组输入,输出作为样本
-定义线性模型,并进行训练
-将训练过程可视化
- 线性回归思想
-线性回归要在一组样本中找到一条直线,最佳拟合样本。
-线性模型表达式为:y = wx + b,其中x, y为一直,w和b为要学习的参数
-线性模型建立后,通过梯度下降,逐渐调整w和b的值,使之逐步接近真实值,如果精度达到预期,则停止训练
import tensorflow as tf
#创建样本数据
x = tf. random _normal([100, 1], mean = 1. 75, stddev = 0. 5, name = "x_data")
y_true = tf. matmul(x, [[2. 0]]) + 5. 0#计算 y=2x+5
#建立线性模型
##初始化权重(随机数)和偏置(固定设置为0),计算wx+b得到预测值
weight = tf. Variable(tf. random_normal([1, 1], name = "w", trainable = True)#训练过程中值是否允许变化
bias = tf. Variable(0. 0, name = "b", trainable = True)#偏置
y_predict = tf. matmul(x, weight) + bias#计算预测值
#创建损失函数
loss = tf. reduce_mean(tf. square(y_true - y_predict))#均方差损失函数
#使用梯度下降进行训练
train_op = tf. train. GradientDescentOptimizer(0. 1). minimize(loss)
init_op = tf. global_variables_initializer()
with tf. Session as sess:
sess. run(init. op)
print("weight: ", weight. eval(), "bias: ", bial. eval())
for 1 in range(10):
sess. run(train. op)
print(1, ": ", "weight: ", weight. eval(), "bias: ", bial. eval())
import tensorflow as tf
#创建样本数据
x = tf. random _normal([100, 1], mean = 1. 75, stddev = 0. 5, name = "x_data")
y_true = tf. matmul(x, [[2. 0]]) + 5. 0#计算 y=2x+5
#建立线性模型
##初始化权重(随机数)和偏置(固定设置为0),计算wx+b得到预测值
weight = tf. Variable(tf. random_normal([1, 1], name = "w", trainable = True)#训练过程中值是否允许变化
bias = tf. Variable(0. 0, name = "b", trainable = True)#偏置
y_predict = tf. matmul(x, weight) + bias#计算预测值
#创建损失函数
loss = tf. reduce_mean(tf. square(y_true - y_predict))#均方差损失函数
#使用梯度下降进行训练
train_op = tf. train. GradientDescentOptimizer(0. 1). minimize(loss)
#收集损失函数的值
tf. summary. scalar("losses", loss)
merged = tf. summary. merge_all()#合并摘要操作
init_op = tf. global_variables_initializer()
with tf. Session as sess:
sess. run(init. op)#执行初始化op
#打印初始权重和偏置
print("weight: ", weight. eval(), "bias: ", bial. eval())
#指定事件文件并记录图的信息
fw = tf. summary. FileWriter(".. /summary/", graph = sess. graph)
#循环训练
for 1 in range(10):
sess. run(train. op)#执行训练
summary = sess. run(merged)#执行摘要合并操作
fw. add_summary(summary, i)#写入事件文件
print(1, ": ", "weight: ", weight. eval(), "bias: ", bial. eval())