java - 如何在DL4J中获取CNN网络卷积层的filters数据来绘制激活图?
问题描述
如何从图层对象中获取过滤器数据以进行这样的配置和模型?
ComputationGraphConfiguration config =
new NeuralNetConfiguration.Builder()
.seed(seed)
.gradientNormalization(GradientNormalization.RenormalizeL2PerLayer)
.l2(1e-3)
.updater(new Adam(1e-3))
.weightInit(WeightInit.XAVIER_UNIFORM)
.graphBuilder()
.addInputs("trainFeatures")
.setInputTypes(InputType.convolutional(60, 200, 3))
.setOutputs("out1", "out2", "out3", "out4", "out5", "out6")
.addLayer(
"cnn1",
new ConvolutionLayer.Builder(new int[] {5, 5}, new int[] {1, 1}, new int[] {0, 0})
.nIn(3)
.nOut(48)
.activation(Activation.RELU)
.build(),
"trainFeatures")
.addLayer(
"maxpool1",
new SubsamplingLayer.Builder(
PoolingType.MAX, new int[] {2, 2}, new int[] {2, 2}, new int[] {0, 0})
.build(),
"cnn1")
.addLayer(
"cnn2",
new ConvolutionLayer.Builder(new int[] {5, 5}, new int[] {1, 1}, new int[] {0, 0})
.nOut(64)
.activation(Activation.RELU)
.build(),
"maxpool1")
.addLayer(
"maxpool2",
new SubsamplingLayer.Builder(
PoolingType.MAX, new int[] {2, 1}, new int[] {2, 1}, new int[] {0, 0})
.build(),
"cnn2")
.addLayer(
"cnn3",
new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {1, 1}, new int[] {0, 0})
.nOut(128)
.activation(Activation.RELU)
.build(),
"maxpool2")
.addLayer(
"maxpool3",
new SubsamplingLayer.Builder(
PoolingType.MAX, new int[] {2, 2}, new int[] {2, 2}, new int[] {0, 0})
.build(),
"cnn3")
.addLayer(
"cnn4",
new ConvolutionLayer.Builder(new int[] {4, 4}, new int[] {1, 1}, new int[] {0, 0})
.nOut(256)
.activation(Activation.RELU)
.build(),
"maxpool3")
.addLayer(
"maxpool4",
new SubsamplingLayer.Builder(
PoolingType.MAX, new int[] {2, 2}, new int[] {2, 2}, new int[] {0, 0})
.build(),
"cnn4")
.addLayer("ffn0", new DenseLayer.Builder().nOut(3072).build(), "maxpool4")
.addLayer("ffn1", new DenseLayer.Builder().nOut(3072).build(), "ffn0")
.addLayer(
"out1",
new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
//.nOut(36)
.nOut(10)
.activation(Activation.SOFTMAX)
.build(),
"ffn1")
.addLayer(
"out2",
new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
//.nOut(36)
.nOut(10)
.activation(Activation.SOFTMAX)
.build(),
"ffn1")
.addLayer(
"out3",
new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
//.nOut(36)
.nOut(10)
.activation(Activation.SOFTMAX)
.build(),
"ffn1")
.addLayer(
"out4",
new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
//.nOut(36)
.nOut(10)
.activation(Activation.SOFTMAX)
.build(),
"ffn1")
.addLayer(
"out5",
new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
//.nOut(36)
.nOut(10)
.activation(Activation.SOFTMAX)
.build(),
"ffn1").addLayer(
"out6",
new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
//.nOut(36)
.nOut(10)
.activation(Activation.SOFTMAX)
.build(),
"ffn1")
//.pretrain(false)
//.backprop(true)
.build();
我的意思是模型经过训练后卷积层激活的 NDArray(或什么?),用于绘制这样的激活图:
我不清楚什么样的 Layer 的 API 会返回 2D 数据来构建它。
解决方案
如果您使用的是 DL4J ui 模块,则只需将ConvolutionalIterationListener添加为模型的另一个侦听器即可获得这些可视化。
如果您不想使用侦听器,您至少可以查看它的代码以了解如何自己创建这些可视化。
推荐阅读
- python - 如何在不丢失后向信息的情况下从多维张量中提取值 - PyTorch
- javascript - 是否可以在 Facebook 帖子中添加带有链接的按钮?
- java - 为什么 Spring Boot 返回一个字符串而不是 JSON
- angular - Getting Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays
- python - Find string elements in matrix from list
- unity3d - hlsl CG 计算着色器竞争条件
- neural-network - 如何在 Chainer 模型中打印图层?
- mysql - MYSQL - 根据另一张表的内容从一张表中选择数据
- php - PHP中的array_merge不覆盖值
- java - java.lang.NoSuchMethodError: io.netty.channel.DefaultChannelId.newInstance()Lio/netty/channel/DefaultChannelId;