Python 如何比较不同Keras模型的重量?

Python 如何比较不同Keras模型的重量?,python,tensorflow,keras,Python,Tensorflow,Keras,我已经以.h5格式保存了许多模型。我想比较一下他们的特点,比如体重。 我不知道怎样才能恰当地比较它们,特别是以表格和数字的形式。 提前谢谢 体重内省是一项相当先进的工作,需要针对具体车型进行治疗。可视化权重在很大程度上是一个技术挑战,但如何处理这些信息则是另一回事——我将主要讨论前者,但会涉及后者 更新:我还建议使用权重、梯度和激活可视化 可视化权重:一种方法如下: 检索感兴趣层的权重。示例:model.layers[1]。获取权重() 了解权重角色和维度。例如:LSTM有三组权重:内核、循环

我已经以.h5格式保存了许多模型。我想比较一下他们的特点,比如体重。 我不知道怎样才能恰当地比较它们,特别是以表格和数字的形式。 提前谢谢


体重内省是一项相当先进的工作,需要针对具体车型进行治疗。可视化权重在很大程度上是一个技术挑战,但如何处理这些信息则是另一回事——我将主要讨论前者,但会涉及后者

更新:我还建议使用权重、梯度和激活可视化


可视化权重:一种方法如下:

  • 检索感兴趣层的权重。示例:
    model.layers[1]。获取权重()
  • 了解权重角色和维度。例如:LSTM有三组权重:
    内核
    循环
    偏差
    ,每一组都有不同的用途。在每个权重矩阵中都有门权重——输入、单元格、遗忘、输出。对于Conv层,过滤器(dim0)、内核和步幅之间的区别
  • 根据第(2)条,以有意义的方式组织权重矩阵,以便可视化。例如:对于Conv,与LSTM不同,特性特定的处理并不是真正必要的,我们可以简单地将内核权重和偏差权重展平,并在直方图中可视化它们
  • 选择可视化方法:直方图、热图、散点图等-对于平坦数据,直方图是最佳选择

  • 解释权重:有几种方法:

    • 稀疏性:如果权重范数(“平均值”)较低,则模型是稀疏的。可能有益,也可能有害
    • 健康:如果太多的重量为零或接近零,这是太多神经元死亡的迹象;这对于调试很有用,因为一旦一个层处于这种状态,它通常不会恢复-所以应该重新开始训练
    • 稳定性:如果权重变化很大且很快,或者存在许多高值权重,则可能表明梯度性能受损,可通过梯度剪裁或权重约束等方式进行补救

    模型比较:没有一种方法可以简单地从不同的模型中并排查看两个权重并确定“这是更好的一个”;分别分析每个模型,例如,如上所述,然后决定哪一个模型的上升超过下降

    然而,最终的分界点将是验证性能——这也是更实际的一个。它是这样的:

  • 几种超参数配置的列车模型
  • 选择一个具有最佳验证性能的
  • 微调该模型(例如,通过进一步的超参数配置)
  • 权重可视化应该主要作为一种调试或记录工具——简言之,即使我们目前对神经网络有最好的理解,也无法通过查看权重来判断模型的泛化程度


    建议:同时可视化图层输出-请参见底部的示例输出


    可视示例

    从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等),问题就太广泛了。命名应用程序(回归、分类等)也将有助于我在几分钟后以图形的形式提供它。但我不认为这取决于我所使用的结构,我只想比较两个重量不同的相似模型。我可以请你为我提供一些进一步信息的资源吗?提前谢谢@除了我提供的一个,当然:模块;