Summary
是为了给tensorboard提供数据,而tensorboard在tensorflow是一种非常方便和实用的内置可视化工具,但可视化对程序来说显然不是必须的。
其中包含以下几种数据结构:
- Scalars
- Images
- Audio
- Graph
- Distribution
- Histograms
- Embeddings
对应的都有tf.summary.xxx
(xxx为上面提到的数据结构形式)
对于任何一个 tf.summary.xxx
源码中都有默认collection=None
这个参数,实际是将summary这个op
收集到[tf.GraphKeys.SUMMARIES]
这个内部维护的collection
当中。
tf.summary.xxx的实质
举个栗子,通常,我们需要sess.run(train_op, feed_dict=...)
来进行训练,train_op
显然是依赖于loss
计算,但所有的tf.summary.xxx
操作都是图的最外层操作,一般来说不被任何别的op
或Variable
依赖,而为了可视化loss
,我们又需要让tf.summary.scalar('loss', self.loss)
run起来,所以程序可以不加sess.run(loss, feed_dict=...)
,而需要sess.run(summary_op, feed_dict=...)
。
当我们想可视化的东西太多了,我们就需要诸多的sess.run(summary_op_i, feed_dict=...)
操作,在tf中又可以用merged_op = tf.summary.merge_all()
来把所有的sess.run(summary_op_i, feed_dict=...)
合并起来,仅sess.run(merged_op, feed_dict=...)
即可
可以