教程的这个部分只是进入TensorFlow世界的开端。 我们使用TensorBoard对结果进行可视化。TensorBoard是TensorFlow提供的图形可视化工具。用Google的话来说:“使用TensorFlow计算像训练一个大的深度神经网络这样的任务是复杂和难以理解的。为了更好地理解、调试和优化TensorFlow程序,我们引入了一套可视化工具叫做TensorBoard。”在本教程中会使用一个简单的TensorBoard实现。 注意:*
像summary operations、TensorBoard以及它们的优势等相关细节查出了本教程的范畴,它们将会在更加高级的教程中叙述。首先,我们需要导入必要的库。
from __future__ import print_function import tensorflow as tf import os由于我们要使用TensorBoard,我们需要一个目录来存储信息(用户需要的操作及其相关的输出)。这些信息会被TensorFlow导出到event files中。Event files可以转换为可视化数据供用户进行结构的评估和操作。存储event files的path(路径)定义如下:
# 默认event files的保存路径与当前python文件的路径相同 tf.app.flags.DEFINE_STRING('log_dir', os.path.dirname(os.path.abspath(__file__)) + '/logs', '事务日志的写入目录。') # FLAG结构存储所有的对象 FLAGS = tf.app.flags.FLAGS 注意: 这里容易出现一个错误`absl.flags._exceptions.DuplicateFlagError: The flag 'log_dir' is defined twice. `,需要在前面加上一段代码清除之前所定义的内容: lst = list(tf.app.flags.FLAGS._flags().keys()) for key in lst: tf.app.flags.FLAGS.__delattr__(key)os.path.dirname(os.path.abspath(__file__))能够得到当前python文件所在的目录名。tf.app.flags.FLAGS指向所有使用FLAGS标识定义的flags。从现在开始可以直接使用FLAGS.flag_name来调用。 为了方便,可以只使用绝对路径。通过下面的代码,用户会被提示必须在log_dir中使用绝对路径。
# 用户会被提示输入绝对路径 # os.path.expanduser用于将“~”符号转换为相应的路径指示符。 # 例如: '~/logs' 等价于 '/home/username/logs' if not os.path.isabs(os.path.expanduser(FLAGS.log_dir)): raise ValueError('你必须在 --log_dir 中使用绝对路径!')TensorFlow可以定义一些语句:
# 定义一些语句! welcome = tf.constant('Welcome to TensorFlow world!')tf.操作符执行特定的操作,输出是一个Tensor。定义属性名称name="some_name"是为了更好地在TensorBoard中进行可视化,就像接下来在教程中所看到的那样。
session是执行操作的环境,具体执行方式如下:
# 执行session with tf.Session() as sess: writer = tf.summary.FileWriter(os.path.expanduser(FLAGS.log_dir), sess.graph) print("输出: ", sess.run(welcome)) # 关闭writer和session writer.close() sess.close()定义tf.summary.FileWriter是将日志写入event files。在对任何Tensor进行取值的时候都要运行sess.run()命令否则操作不会执行,最后使用writer.close()来关闭summary writer。
