【Python深度学习】Python全栈体系(三十一)

深度学习

第九章 Tensorboard 可视化

Tensorboard 工具

1. 什么是可视化?

  • 可视化是用来查看在 Tensorflow 平台下程序运行的过程,包括:张量/变量,操作,数据流,学习过程等,从而方便 Tensorflow 程序的理解、调试与优化
  • Tensorflow 提供了专门的可视化工具 tensorboard,它将 Tensorflow 执行的数据、模型、过程用图形方式进行显示。Tensorflow 在执行过程中,可以通过某些操作,将模型、数据、graph等信息,保存到磁盘中的 Events 文件中去,从而提供给 Tensorboard 进行可视化

2. 启动 tensorboard

  • 使用以下命令启动 tensorboard
    • tensorboard --logdir=“PycharmProjects/tensorflow_study/summary/”
  • 其中,logdir参数的值为事件文件存储目录,启动成功后可以看到如下信息,使用提示的URL地址和端口进行访问:
    在这里插入图片描述

3. tensorboard 主页

【Python深度学习】Python全栈体系(三十一)_第1张图片

4. 为操作添加可视化

# 将图中的信息存入事件文件,并在tensorboard中显示示例
import tensorflow as tf

tf.compat.v1.disable_eager_execution()

# 创建一组操作
a = tf.constant([1, 2, 3, 4, 5])  # 普通张量
var = tf.Variable(tf.compat.v1.random_normal([2, 3], mean=0.0, stddev=1.0),
                  name="var")  # 变量
b = tf.constant(3.0, name="a")  # 这里故意将python变量和tf的op名称取的不一致
c = tf.constant(4.0, name="b")
d = tf.add(b, c, name="add")

# 显式初始化
init_op = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init_op)
    # 将当前session的graph信息写入事件文件
    fw = tf.compat.v1.summary.FileWriter("../summary/", graph=sess.graph)
    print(sess.run([a, var, d]))

"""
[array([1, 2, 3, 4, 5]), array([[ 0.3767314 , -1.4588505 ,  0.07674389],
       [ 0.10296078,  1.2612373 , -0.423312  ]], dtype=float32), 7.0]
"""

5. 摘要与事件文件操作

  • 如果需要将变量/张量在tensorboard中显示,需要执行以下两步:
    • 收集变量:
      • tf.summary.scalar(name, tensor) # 收集标量,name为名字,tensor为值
      • tf.summary.histogram(name, tensor) # 收集高维度变量参数
      • tf.summary.image(name, tensor) # 收集图片张量
    • 合并变量并写入事件文件:
      • merged = tf.summary.merge_all() # 合并所有变量
      • summary = sess.run(merged) # 运行合并,每次迭代训练都需要运行
      • FileWriter.add_summary(summary, i) # 添加摘要,i表示第几次的值

第十章 综合案例:实现线性回归

综合案例:实现线性回归

  • 任务描述:
    • 给定一组输入、输出作为样本
    • 定义线性模型,并进行训练
    • 将训练过程可视化
      【Python深度学习】Python全栈体系(三十一)_第2张图片
# 线性回归示例
import tensorflow as tf

tf.compat.v1.disable_eager_execution()
# 第一步:创建样本数据
# 100行1列
x = tf.compat.v1.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.compat.v1.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))  # 均方差损失函数
# 第四步:使用梯度下降进行训练
# 0.1 学习率
train_op = tf.compat.v1.train.GradientDescentOptimizer(0.1).minimize(loss)
# 收集损失函数的值
tf.compat.v1.summary.scalar("losses", loss)
merged = tf.compat.v1.summary.merge_all()  # 合并摘要操作

init_op = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init_op)  # 执行初始化op

    # 打印初始权重和偏置
    print("weight: ", weight.eval(), "bias: ", bias.eval())

    # 指定事件文件并记录图的信息
    fw = tf.compat.v1.summary.FileWriter("../summary/", graph=sess.graph)
    # 循环训练
    for i in range(500):
        sess.run(train_op)  # 执行训练
        summary = sess.run(merged)  # 执行摘要合并操作
        fw.add_summary(summary, i)  # 写入事件文件
        print(i, ":", " weight: ", weight.eval(), "bias: ", bias.eval())
"""
weight:  [[0.33808643]] bias:  0.0
0 :  weight:  [[3.290972]] bias:  1.5962065
1 :  weight:  [[3.630976]] bias:  1.8313535
2 :  weight:  [[3.6257746]] bias:  1.8716582
...
497 :  weight:  [[2.0047247]] bias:  4.990969
498 :  weight:  [[2.0046072]] bias:  4.9910398
499 :  weight:  [[2.0047135]] bias:  4.991211
"""

你可能感兴趣的:(Python深度学习,python,深度学习,tensorflow)