TensorFlow的tf.summary.FileWriter
函数主要用于将TensorFlow graph的信息写入TensorBoard中,以便可视化查看训练过程中的变化和性能指标。
具体的使用方法如下:
首先需要声明一个文件写入器对象,例如:
writer = tf.summary.FileWriter("/path/to/log/directory", sess.graph)
其中,/path/to/log/directory
是一个文件夹的路径,将存储TensorBoard文件。sess.graph
是用于可视化的计算图对象。
然后,在训练模型的过程中可以调用tf.summary.FileWriter
对象的方法,将可视化结果写入到TensorBoard日志目录中。主要的方法有:
-
add_summary(summary, global_step=None)
: 将一个TensorFlow summary写入日志目录中,其中summary
是需要写入的summary对象,global_step
参数是可选的,用于标记每个summary的时间步,以便在TensorBoard界面中显示时间序列。 -
add_graph(graph, global_step=None)
: 将一个TensorFlow graph写入日志目录中,其中graph
是需要写入的计算图对象,global_step
参数同上。
具体使用方法如下:
import tensorflow as tf
# 构建计算图
a = tf.constant(1)
b = tf.constant(2)
c = a + b
# 创建文件写入器对象
writer = tf.summary.FileWriter("/path/to/log/directory", tf.get_default_graph())
# 写入计算图
writer.add_graph(tf.get_default_graph())
# 执行计算图
with tf.Session() as sess:
print(sess.run(c))
# 关闭文件写入器
writer.close()
在以上例子中,“/path/to/log/directory”是TensorBoard日志目录的路径。首先,我们在创建的计算图中创建一个文件写入器对象。在这个例子中,我们通过add_graph
方法将计算图写入日志目录中。运行计算图对象,标记了每个TensorBoard日志的时间步,然后关闭文件写入器对象。
另一个实例是在TensorFlow中使用minibatch进行训练。这里我们将使用add_summary
方法,将每个minibatch的精度和误差写入TensorBoard。关键代码如下:
import tensorflow as tf
import numpy as np
# 定义模型
def model(inputs):
with tf.name_scope("layer1"):
W1 = tf.Variable(tf.random_uniform([4, 4], -1.0, 1.0), name="W1")
b1 = tf.Variable(tf.zeros([4]), name="b1")
z1 = tf.nn.relu(tf.matmul(inputs, W1) + b1)
with tf.name_scope("layer2"):
W2 = tf.Variable(tf.random_uniform([4, 1], -1.0, 1.0), name="W2")
b2 = tf.Variable(tf.zeros([1]), name="b2")
z2 = tf.matmul(z1, W2) + b2
return z2
# 计算精度和误差
def accuracy(targets, predictions):
with tf.name_scope("accuracy"):
correct_predictions = tf.equal(tf.argmax(targets,1), tf.argmax(predictions,1))
acc = tf.reduce_mean(tf.cast(correct_predictions, "float"))
tf.summary.scalar("accuracy", acc)
return acc
def loss(predictions, targets):
with tf.name_scope("loss"):
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=predictions, labels=targets))
tf.summary.scalar("loss", loss)
return loss
# 生成随机数据
train_data = np.random.uniform(size=(1000,4))
train_targets = np.zeros((1000,2))
for i in range(1000):
if train_data[i,0]+train_data[i,1]+train_data[i,2]+train_data[i,3] > 2:
train_targets[i,:] = [0,1]
else:
train_targets[i,:] = [1,0]
# 构造模型
x = tf.placeholder(tf.float32, [None, 4])
y_ = tf.placeholder(tf.float32, [None, 2])
predictions = model(x)
accuracy_op = accuracy(y_, predictions)
loss_op = loss(predictions, y_)
# 创建文件写入器对象
writer = tf.summary.FileWriter("/path/to/log/directory", tf.get_default_graph())
# 迭代训练
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
indices = np.random.choice(1000, size=10)
batch_data = train_data[indices,:]
batch_targets = train_targets[indices,:]
_, train_accuracy, train_loss, summary = sess.run([train_step, accuracy_op, loss_op, merged_summary], feed_dict={x: batch_data, y_: batch_targets})
writer.add_summary(summary, global_step=i)
# 关闭文件写入器
writer.close()
在这里,我们定义了一个具有两个隐藏层的神经网络,然后使用TensorFlow的函数生成了一些随机数据并进行训练。我们使用tf.summary.scalar
函数来定义每个minibatch的精度和误差,然后通过add_summary
方法将它们写入到TensorBoard日志目录中。在训练结束后,我们关闭文件写入器对象。
以上两个实例展示了tf.summary.FileWriter
函数的主要用途:可视化TensorFlow graph和训练过程的指标。但它并不仅限于此,还可以用于可视化其他TensorFlow变量和评估过程中的指标。注意,为了使TensorBoard使用tf.summary.FileWriter
日志文件,您需要在TensorBoard中使用相同的目录来运行。