如何在张量板上绘制权重直方图?
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) 应该只包含最终的权重和偏差,因此只会获得最终的分布,而不是整个训练期间的直方图。
希望这对您有所帮助。
我有一个 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) 应该只包含最终的权重和偏差,因此只会获得最终的分布,而不是整个训练期间的直方图。
希望这对您有所帮助。