You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Deeplearning4j中获取模型各层的原始激活值与权重以实现图像分类模型可视化?

获取动态构建模型的层激活值与权重方法

当然有可行的方法来获取每一层的原始激活值,也能轻松拿到模型权重——从你的model.summary()格式来看,应该是用DL4J框架吧?下面的方法基于这个框架展开,要是用的其他框架可以告诉我调整。

获取每一层的激活值

你现在用的model.predict()和model.output()只能拿到最终输出,想要捕获所有层的激活,换用feedForward方法就可以一次性搞定:

INDArray reshaped = reshapeImage(image);
// 第二个参数传true,会返回从输入层到输出层的所有激活值
Map<String, INDArray> allLayerOutputs = model.feedForward(reshaped, true);

拿到这个Map之后,你可以直接通过层名(就是你summary里的layer0、layer1、layer2)来获取对应层的激活值:

// 比如获取隐藏层layer1的激活
INDArray layer1Activation = allLayerOutputs.get("layer1");
// 输出形状验证,应该和summary里的nOut匹配(这里是100)
System.out.println("Layer1 activation shape: " + layer1Activation.shapeInfoToString());

这个方法不需要修改你现有的模型结构,完全在预测流程中就能捕获所有层的原始输出,非常适合可视化需求。

获取模型权重(可选)

想要拿到每一层的权重和偏置,直接通过层对象的getParam()方法就能获取:

// 遍历模型的所有层
for (int i = 0; i < model.getnLayers(); i++) {
    Layer currentLayer = model.getLayer(i);
    String layerName = currentLayer.conf().getLayer().getLayerName();
    
    // 获取权重矩阵W
    INDArray weights = currentLayer.getParam("W");
    // 获取偏置向量b
    INDArray bias = currentLayer.getParam("b");
    
    // 这里可以把权重保存下来,比如转成二维数组用于热力图可视化
    System.out.println(layerName + " weights shape: " + weights.shapeInfoToString());
}

比如你的layer0的权重是784x200的矩阵,用上面的代码就能拿到对应的INDArray,直接用于后续的可视化操作。

如果你的模型是ComputationGraph类型(而非MultiLayerNetwork),只需要把getLayer(int index)换成getLayer(String layerName)按名称获取层就行,逻辑完全一致。

内容的提问来源于stack exchange,提问作者Leyens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:07:44