Я построил нейронную сеть с кератами для классификации данных, которые содержат несколько меток. Сеть работает хорошо, и я могу видеть матрицы путаницы и то, насколько хорошо сеть работает.
Однако я хотел бы видеть сейчас входные функции, которые наиболее взвешены в разных узлах.
После построения модели я выделил различные слои следующим образом:
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)
Список, созданный из функции выше, не позволяет мне видеть, где объекты находятся в узлах и каковы их значения активации.
Конечная цель состоит в том, чтобы иметь список оценок веса элементов для каждого узла в образце, чтобы я мог видеть, как узлы кластеризуются в соответствии с кластеризацией на тепловой карте.
Это, кажется, действительно сложная задача, и, похоже, что-то там, что я видел, не могло бы достичь этого. Любая помощь будет высоко ценится.
Большое спасибо!