如何在张量板上绘制权重直方图?

How to draw weights histogram on tensorboard?

我有一个 train.py 和一个 model.py 用于 3D 分类深度学习模型。我在 model.py 中定义模型。在 train.py 中,我从 model.py 导入模型并开始训练。

我通过使用 train.py 中的 tf.summary.scalar 函数可视化训练损失或准确性。

但是,我在尝试绘制体重直方图时遇到了问题。 我找到了 tf.summary.histogram 函数,但我不知道该把这个函数放在哪里(在 train.py 或 model.py 中?)。

在model.py中,我使用tf.contrib.layers函数定义图层。 (对不起,我的英语水平很差)

PS:
我将我的模型保存为 .ckpt 格式。我可以通过加载这个保存的模型来绘制权重直方图吗?

我将尝试分别回答您的每个问题。

I'm having trouble when I am trying to draw weight's histogram.

理想情况下,您使用 tf.get_variable 定义 权重 偏差 并将它们添加到摘要直方图中。

例如:

with tf.name_scope("layer1"):
    W1 = tf.get_variable("W1", shape=[input_size, hidden_layer_neurons],
                         initializer=tf.contrib.layers.xavier_initializer())
    layer1 = tf.matmul(X, W1)
    layer1_act = tf.nn.tanh(layer1)
    tf.summary.histogram("weights", W1)

如果需要,我们还可以添加层输出和激活输出的直方图:

    tf.summary.histogram("layer-outputs", layer1)
    tf.summary.histogram("activation-outputs", layer1_act)

但是由于您使用的是 tf.contrib.layers,因此您没有 contrib.layers 这样的规定来为您创建权重和偏差。这种情况,你可以看看tf.trainable_variables();这应该包含图表中的所有可训练变量,其中包含网络的所有权重和偏差。

您可以像这样定义一个简单的函数:

def add_hist(train_vars):
    for i in train_vars:
        name = i.name.split(":")[0]
        value = i.value()
        tf.summary.histogram(name, value)

I can't figure out where to put this function (in train.py? or model.py?)

损失和准确度等标量摘要是在训练过程中获得的,因此包含在train.py中;而权重和偏差是核心模型的一部分,因此将包含在 model.py

所以在你的 model.py 中,在你使用 tf.summary.merge_all()

之前包括这个
train_vars = tf.trainable_variables()
add_hist(train_vars)

Can I draw weight histogram by load this saved model?

这些直方图通常显示训练期间实体(权重或激活等)的分布。这些图通常主要用于了解这些分布如何随时间变化、参数或其梯度是否饱和、需要采取任何明确的改进措施等。

由于您保存的检查点 (.ckpt) 应该只包含最终的权重和偏差,因此只会获得最终的分布,而不是整个训练期间的直方图。

希望这对您有所帮助。