Python 如何比较不同Keras模型的重量?
我已经以.h5格式保存了许多模型。我想比较一下他们的特点,比如体重。 我不知道怎样才能恰当地比较它们,特别是以表格和数字的形式。 提前谢谢Python 如何比较不同Keras模型的重量?,python,tensorflow,keras,Python,Tensorflow,Keras,我已经以.h5格式保存了许多模型。我想比较一下他们的特点,比如体重。 我不知道怎样才能恰当地比较它们,特别是以表格和数字的形式。 提前谢谢 体重内省是一项相当先进的工作,需要针对具体车型进行治疗。可视化权重在很大程度上是一个技术挑战,但如何处理这些信息则是另一回事——我将主要讨论前者,但会涉及后者 更新:我还建议使用权重、梯度和激活可视化 可视化权重:一种方法如下: 检索感兴趣层的权重。示例:model.layers[1]。获取权重() 了解权重角色和维度。例如:LSTM有三组权重:内核、循环
体重内省是一项相当先进的工作,需要针对具体车型进行治疗。可视化权重在很大程度上是一个技术挑战,但如何处理这些信息则是另一回事——我将主要讨论前者,但会涉及后者 更新:我还建议使用权重、梯度和激活可视化
可视化权重:一种方法如下:
model.layers[1]。获取权重()
内核
、循环
和偏差
,每一组都有不同的用途。在每个权重矩阵中都有门权重——输入、单元格、遗忘、输出。对于Conv层,过滤器(dim0)、内核和步幅之间的区别解释权重:有几种方法:
- 稀疏性:如果权重范数(“平均值”)较低,则模型是稀疏的。可能有益,也可能有害
- 健康:如果太多的重量为零或接近零,这是太多神经元死亡的迹象;这对于调试很有用,因为一旦一个层处于这种状态,它通常不会恢复-所以应该重新开始训练
- 稳定性:如果权重变化很大且很快,或者存在许多高值权重,则可能表明梯度性能受损,可通过梯度剪裁或权重约束等方式进行补救
模型比较:没有一种方法可以简单地从不同的模型中并排查看两个权重并确定“这是更好的一个”;分别分析每个模型,例如,如上所述,然后决定哪一个模型的上升超过下降 然而,最终的分界点将是验证性能——这也是更实际的一个。它是这样的:
建议:同时可视化图层输出-请参见底部的示例输出
可视示例:
从tensorflow.keras.layers导入输入,Conv2D,密集,展平
从tensorflow.keras.models导入模型
ipt=输入(形状=(16,16,16))
x=Conv2D(12,8,1)(ipt)
x=展平()(x)
out=密度(16)(x)
模型=模型(ipt,out)
model.compile('adam','mse')
X=np.random.randn(10,16,16,16)#玩具数据
Y=np.random.randn(10,16)#玩具标签
对于范围(10)内的uu:
批量生产(X,Y)上的系列
def获取权重打印统计数据(图层):
W=层。获取_权重()
印刷品(透镜(W))
对于w中的w:
印刷品(w形)
返回W
def历史重量(重量,箱=500):
对于以重量表示的重量:
plt.hist(np.ndarray.flatten(重量),料仓=料仓)
W=获取权重打印统计数据(模型层[1])
# 2
# (8, 8, 16, 12)
# (12,)
历史重量(W)
Conv1D输出可视化:()
为什么要这样做?仅仅通过查看原始权重列表,您可能无法识别任何有价值的东西。处理权重的方法有无数种,每种方法都可能因不同的原因而有用或无效。在不知道您为什么要查看权重的情况下,我们无法告诉您最好的方法。您的模型包括哪些层?我对不同类型的数据使用了不同的模型,但我认为模型的权重非常接近。如果是,我不需要为每种类型的数据使用不同的模型。它们包括conv2d、maxpool2d、dense、flatte。如果不提供关于您的模型的更多信息,至少是您使用的层(dense、LSTM等),问题就太广泛了。命名应用程序(回归、分类等)也将有助于我在几分钟后以图形的形式提供它。但我不认为这取决于我所使用的结构,我只想比较两个重量不同的相似模型。我可以请你为我提供一些进一步信息的资源吗?提前谢谢@除了我提供的一个,当然:模块;