3

我按照TensorFlow Layers 教程使用 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 教程?如果文档和教程更加统一,那就太好了。

4

3 回答 3

2

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

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

希望这可以帮助!

于 2018-03-09T21:55:00.127 回答
1

你可以使用这样的东西

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)
于 2018-03-22T17:28:39.853 回答
0

另一种选择是使用tf.layers.Dense代替(和之间的tf.layers.dense差异)。dD

的范式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

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

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

于 2018-03-23T05:15:53.020 回答