四时宝库

程序员的知识宝库

记录TensorFlow训练过程中数据变化趋势-weight、bias、loss等

TensorFlow 深度学习读写笔记

Python搭建开发环境-Anaconda+PyCharm的安装和入门教程

Jupyter Notebook神器-免费体验来自微软的Azure Notebook

Windows 10 本地搭建TensorFlow(CPU版本)深度学习环境

主流深度学习框架-MXNet、Caffe、TensorFlow、Torch、Theano

机器学习算法和深度学习算法比较

TensorFlow 的计算模型、数据模型和运行模型

Windows下的Jupyter Notebook 安装与自定义启动(图文详解)

结合TensorFlow Playground理解神经网络的主要功能

TensorFlow读书笔记:使用placeholder填充方式读取数据

如何将TensorFlow 训练过程中产生的一些中间数据用图形化的方式展示出来,并能够很方便地查看某项数值的变化趋势。

要实现这一功能,需要先将数据记录到 event 文件中,然后使用TensorBoard 工具打开保存的 event 文件,在进行图形化展示。

如何收集这些数据?

1. 收集数据也是一种操作。因此需要在定义计算图的结构时,将数据收集的操作放到计算图中。

2. 在会话Session 中执行收集数据的操作时,就会数据写入到 event 文件中。

下面计算一个简单的公式:y = weight * x + bias,其中 x 是输入,y是输出。通过训练来寻找数据的分布,得到 weight和bias的值。

在训练的过程中,记录 weight、bias和损失函数loss的值的变化过程。

import numpy as np

import tensorflow as tf

# 构建图

x = tf.placeholder(tf.float32)

y = tf.placeholder(tf.float32)

# 定义weight 和 bias 参数,起初都是随机值。

weight = tf.get_variable("weight", [], tf.float32, initializer=tf.random_normal_initializer())

bias = tf.get_variable("bias", [], tf.float32, initializer=tf.random_normal_initializer())

pred = tf.add(tf.multiply(x, weight, name="mul_op"), bias, name="add_op")

# 损失函数

loss = tf.square(y-pred, name="loss")

# 优化函数

# 梯度下降算法是用的最普遍的优化算法,迭代到一定次数最终能够找到最优解。

# 0.01 - Learning rate

optimizer = tf.train.GradientDescentOptimizer(0.01)

# 计算梯度,应用梯度操作

# compute_gradients和apply_gradients,前者用于计算梯度,后者用于使用计算得到的梯度来更新对应的variable。

grads_and_vars = optimizer.compute_gradients(loss)

train_op = optimizer.apply_gradients(grads_and_vars)

# 收集训练过程中 weight, bias 和 loss的值

tf.summary.scalar("weight", weight)

tf.summary.scalar("bias", bias)

tf.summary.scalar("loss", loss[0])

# 将前面所有summary 的操作合并到一个

merged_summary = tf.summary.merge_all()

summary_writer = tf.summary.FileWriter("./log_graph")

summary_writer.add_graph(tf.get_default_graph())

init_op = tf.global_variables_initializer()

with tf.Session() as sess:

sess.run(init_op)

for step in range(500):

train_x = np.random.randn(1)

train_y = 2*train_x+np.random.randn(1)*0.01 + 10

_, summary = sess.run([train_op, merged_summary], feed_dict={x: train_x, y: train_y})

summary_writer.add_summary(summary, step)

通过TensorBoard 工具展示数据

执行上述代码之后,会将数据保存在 /log_graph 文件夹下。

执行tensorboard 命令:

tensorboard --logdir=./log_graph

在浏览器中,访问 http://localhost:6006/,展示效果如下。

横坐标表示的是训练步骤step的值。

上述3张图,纵坐标分别是循环执行过程中 bias、loss和weight的值。可以看到,随着训练的进行,weight 的值越来越接近 2,bias的值越来越接近10,loss的值越来越接近0,这说明这个模型符合 y=2*x + 10的数据分布。

训练数据是通过下面2行代码生成的:

train_x = np.random.randn(1)

train_y = 2*train_x+np.random.randn(1)*0.01 + 10

在TensorBoard 中查看图结构

点击 Graphas 菜单,会看到图结构示意图。

从图中可以看到,一个placeholder 和weight变量相乘之后,再与一个名为 bias 的变量相加。

当鼠标放到 weight或 bias变量上时,会出现一个+号,点击可以显示里面有4个操作,这是因为一个变量包含了4个操作,点击其中任意一个,在右边会显示这个操作的详细信息。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接