【问题标题】:How to use TensorBoard and summary operations with the tf.layers module如何在 tf.layers 模块中使用 TensorBoard 和汇总操作
【发布时间】:2018-03-09 20:42:03
【问题描述】:

我已经按照TensorFlow Layers tutorial 使用 TensorFlow 的 tf.layers 模块创建了一个用于 MNIST 数字分类的 CNN。现在我正在尝试从TensorBoard: Visualizing Learning 学习如何使用 TensorBoard。也许本教程最近没有更新,因为它说它的示例代码是对该教程的修改并链接到它,但代码完全不同:它手动定义了一个单隐藏层全连接网络。

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

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

这是将 TensorBoard 与 tf.layers 结合使用的最佳方式,还是有更直接与 tf.layers 和功能接口兼容的方式?如果是这样,是否有更新的官方 TensorBoard 教程?如果文档和教程更加统一,那就太好了。

【问题讨论】:

    标签: tensorflow deep-learning tensorboard tensorflow-layers


    【解决方案1】:

    您应该能够使用 tf.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)
    

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

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      你可以使用这样的东西

      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)
      

      【讨论】:

        【解决方案3】:

        另一种选择是使用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

        其他层(例如卷积层)的情况类似。使用任何可用的自动完成检查它们。

        【讨论】:

        • 这是我在问题中提到的选项,我想看看是否有替代方案。
        猜你喜欢
        • 1970-01-01
        • 2017-07-13
        • 2020-08-30
        • 1970-01-01
        • 2017-03-23
        • 2016-12-24
        • 2017-06-16
        • 2017-09-26
        • 2017-11-27
        相关资源
        最近更新 更多