我以.h5格式保存了许多模型。我想比较一下它们的特性,例如重量。 我不知道我如何能以表格和数字的形式对它们进行适当的比较。 提前致谢。
答案 0 :(得分:0)
体重自省是一项相当先进的工作,需要特定于模型的处理。可视化权重在很大程度上是一项技术挑战,但是您对这些信息的处理却是另一回事-我将主要讨论前者,但涉及后者。
可视化权重:一种方法如下:
model.layers[1].get_weights()
kernel
,recurrent
和bias
,每组都有不同的用途。 中的每个权重矩阵都是 gate 权重-输入,单元格,忘记,输出。对于Conv图层,过滤器(dim0),内核和步幅之间是有区别的。解释权重:几种方法是:
模型比较:没有一种方法可以简单地并排查看来自不同模型的两个权重并确定“这是更好的”。例如,如上所述,分别分析每个模型,然后确定哪个模型胜于其他模型。
但是,最终的决胜局将是验证性能-这也是更实际的一种。内容如下:
重量可视化应该主要作为调试或日志记录工具保存-简单地说,即使我们对神经网络有最新的了解,也无法仅通过查看重量就知道模型的推广效果。
建议:还可视化图层输出-请参见this answer,并在底部示例输出。
视觉示例:
from tensorflow.keras.layers import Input, Conv2D, Dense, Flatten
from tensorflow.keras.models import Model
ipt = Input(shape=(16, 16, 16))
x = Conv2D(12, 8, 1)(ipt)
x = Flatten()(x)
out = Dense(16)(x)
model = Model(ipt, out)
model.compile('adam', 'mse')
X = np.random.randn(10, 16, 16, 16) # toy data
Y = np.random.randn(10, 16) # toy labels
for _ in range(10):
model.train_on_batch(X, Y)
def get_weights_print_stats(layer):
W = layer.get_weights()
print(len(W))
for w in W:
print(w.shape)
return W
def hist_weights(weights, bins=500):
for weight in weights:
plt.hist(np.ndarray.flatten(weight), bins=bins)
W = get_weights_print_stats(model.layers[1])
# 2
# (8, 8, 16, 12)
# (12,)
hist_weights(W)
Conv1D输出可视化:(source)