这一节我们来讲讲TensorFlow可视化
TensorFlow提供了一套可视化工具:TensorBoard,在通过pip安装TensorFlow的情况下,默认也会安装TensorBoard。通过TensorBoard可以展示TensorFlow的图像、绘制图像生成的定量指标以及附加数据等信息。
TensorBoard通过读取TensorFlow的事件文件来运行,TensorFlow的事件文件包括了在TensorFlow运行中涉及到的主要数据,比如:scalar、image、audio、histogram和graph等。通过tf.summary相关API,将数据添加summary中,然后在Session中执行这些操作得到一个序列化Summary protobuf对象,然后使用FileWriter对象将汇总的序列数据写入到磁盘,然后使用tensorboard命令进行图标展示,默认访问端
口是:6006
TensorBoard中支持结构视图和设备视图。
TensorFlow线程和队列
在TensorFlow进行异步计算的时候,队列是一种强大的机制。和TensorFlow中的其它组件一样,队列就是TensorFlow图中的节点。这是一种有状态的节点,和变量一样。其它节点可以修改它的内容,比如:将新元素添加到队列后端,也可以把队列前端的元素删除。
TensorFlow常见队列:
FIFOQueue:先进先出队列
RandomShuffleQueue:随机混淆队列
TensorFlow线程和队列
队列使用的常见结构:
多个线程准备训练数据,并将这些数据推入队列中
一个训练线程执行一个训练操作,此操作会从队列中移除最小批次的数据(mini batches)
TensorFlow的Session对象是支持多线程的,因此多个线程可以比较方便的使用同一个Session并且并行的执行操作。但是,在Python程序实现这样的并行运算并不容易,所有线程必须被同步的终止,异常必须被正确的捕获并报告,会话终止的时候,队列必须对正确的关闭。针对这个问题,TensorFlow提供了两个类来帮助多线程的实现:tf.Coordinator和tf.QueueRunner。
Coordinator类可以用来停止多个工作线程并且向那个在等待所有工作线程终止的线程发送异常报告
QueueRunner类用来协调多个工作线程同时将多个张量推入一个队列中
Coordinator类的主要方法如下:
should_stop():如果线程应该停止则返回True request_stop():请求线程停止join():等待被指定的线程终止Coordinator类的操作过程主要如下:
首先创建Coordinator对象,然后建立一些使用Coordinator对象的线程
这些线程都是一直运行的,直到should_stop返回True时候停止。
任意线程都可以显示的调用的request_stop方法来停止线程,同时其它线程的should_stop会返回True
QueueRunner类可以创建一组线程,这些线程可以重复的执行Qnquene操作,同时使用Coordinator来处理线程同步终止,此外QueueRunner内部维护了一个closer thread,当Coordinator收到异常报告时,这个线程会自动关闭队列。