我已经用keras构建了一个神经网络来对包含多个标签的数据进行分类。该网络运行良好,我能够看到混乱矩阵以及网络性能如何。
不过,我现在想看看的是在不同节点中权重最大的输入要素。
在构建模型之后,我将不同的层隔离如下:
layer_name1<-"dense_7"
intermediate_layer_model <- keras_model(inputs = model2$input, outputs = get_layer(model2, layer_name1)$output)
然后我使用了在以下位置找到的功能
:https://bgreenwell.github.io/pdp/articles/pdp-example-tensorflow.html
以便从输入数据中提取要素(大概)以及它们如何在图层中评分。代码如下:
pred_wrapper <- function(object, newdata ) {
features<-predict(object, x = as.matrix(newdata)) %>%
as.vector()
}
View(pred_wrapper(intermediate_layer_model, training1))
这将生成一列功能列表及其激活分数。问题如下:
我无法将这些功能映射到其原始标签:它们只是行名称为1:n ...的列表,我必须按以下说明进行纠正(有效,但在运行上述功能时无效):
colnames(training1)<-colnames(training)
第二个问题是,该列表不会产生激活的“障碍”,因为它仅位于一列中。因此,举例来说,如果我为给定层制作了一个激活节点的热图,则我将数字样本作为行,将节点作为列,并基于权重值来“激活”节点。下面的代码产生了这一点:
layer_name<-"dense_7"
intermediate_layer_model <- keras_model(inputs = model2$input, outputs = get_layer(model2, layer_name)$output)
intermediate_output <- predict(intermediate_layer_model, training1)
从上面的函数生成的列表不允许我看到要素在节点内的位置以及它们的激活值是什么。
最终目标是为每个样本的每个节点提供一个特征权重得分列表,以便我可以根据热图上的聚类了解节点如何聚类。
这似乎是一个非常艰巨的挑战,而且似乎没有什么可以实现这一目标的。任何帮助将不胜感激。
非常感谢!