如何在 tf.layers 模块中使用 TensorBoard 和汇总操作

How to use TensorBoard and summary operations with the tf.layers module

我已经关注了TensorFlow Layers tutorial to create a CNN for MNIST digit classification using TensorFlow's tf.layers module. Now I'm trying to learn how to use TensorBoard from TensorBoard: Visualizing Learning。也许这个教程最近没有更新,因为它说它的示例代码是那个教程的修改和指向它的链接,但是代码是完全不同的:它手动定义了一个单隐藏层的全连接网络。

TensorBoard 教程展示了如何使用 tf.summary 通过在层的权重张量上创建操作来将摘要附加到层,因为我们手动定义了层,所以可以直接访问,并附加 tf.summary对象到那些操作。如果我使用 tf.layers 及其教程代码,要做到这一点,我相信我必须:

  1. 修改 Layers 教程的示例代码以使用非功能性接口(Conv2D 代替 conv2d,Dense 代替 dense)来创建图层
  2. 使用图层对象的 trainable_weights() 函数获取权重张量并将 tf.summary 对象附加到那些

这是将 TensorBoard 与 tf.layers 一起使用的最佳方式吗?还是有一种方法可以更直接地与 tf.layers 和功能接口兼容?如果是这样,是否有更新的官方 TensorBoard 教程?如果文档和教程能更统一一点就好了。

您应该能够使用 tf.layers 调用的输出来获取激活。取linked layers教程的第一个卷积层:

# Convolutional Layer #1
conv1 = tf.layers.conv2d(
    inputs=input_layer,
    filters=32,
    kernel_size=[5, 5],
    padding="same",
    activation=tf.nn.relu)

你可以这样做:

tensor_name = conv1.op.name
tf.summary.histogram(tensor_name + '/activation', conv1)

不确定这是否是最好的方法,但我相信这是做你想做的最直接的方法。

希望对您有所帮助!

你可以使用这样的东西

with tf.name_scope('dense2'):

    preds = tf.layers.dense(inputs=dense1,units = 12,  
                    activation=tf.nn.sigmoid, name="dense2")

    d2_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'dense2')

    tf.summary.histogram("weights", d2_vars[0])
    tf.summary.histogram("biases", d2_vars[1])
    tf.summary.histogram("activations", preds)

另一种选择是使用tf.layers.Dense代替tf.layers.densedD之间的区别)。

Dense 的范例是:

x = tf.placeholder(shape=[None, 100])
dlayer = tf.layers.Dense(hidden_unit)
y = dlayer(x)

dlayer为中间,你可以做到:

k = dlayer.kernel
b = dlayer.bias
k_and_b = dlayer.weights

请注意,在您申请 y = dlayer(x) 之前,您不会获得 dlayer.kernel

卷积层等其他层的情况类似。用任何可用的 auto-completion.

检查它们