如何在 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 及其教程代码,要做到这一点,我相信我必须:
- 修改 Layers 教程的示例代码以使用非功能性接口(Conv2D 代替 conv2d,Dense 代替 dense)来创建图层
- 使用图层对象的 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.dense
(d
和D
之间的区别)。
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.
检查它们
我已经关注了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 及其教程代码,要做到这一点,我相信我必须:
- 修改 Layers 教程的示例代码以使用非功能性接口(Conv2D 代替 conv2d,Dense 代替 dense)来创建图层
- 使用图层对象的 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.dense
(d
和D
之间的区别)。
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.
检查它们