TensorFlow 深度学习读写笔记
Python搭建开发环境-Anaconda+PyCharm的安装和入门教程
Jupyter Notebook神器-免费体验来自微软的Azure Notebook
Windows 10 本地搭建TensorFlow(CPU版本)深度学习环境
主流深度学习框架-MXNet、Caffe、TensorFlow、Torch、Theano
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个操作,点击其中任意一个,在右边会显示这个操作的详细信息。