Использование двух разных сигмоидальных функций в Neuralnet в R
Я пытаюсь повторить исследование ( https://www.sciencedirect.com/science/article/pii/S0957417410011711)
В исследовании они используют две разные функции, одну для скрытого слоя и одну для вывода. На странице 5314 они пишут: "На скрытом слое была выбрана касательная передаточная функция сигмоиды. С другой стороны, на выходном слое была использована передаточная функция логистической сигмоиды".
Я пользуюсь пакетом "neuralnet" в R.
Чтобы иметь функцию передачи касательной сигмоида для скрытого слоя, я могу использовать код:
act.fct = 'tanh'
Но это создаст проблему, что у меня либо А) будет ЖЕ функция для выходного слоя.
Или б) пользуюсь linear.output = T
Что дает мне линейный выход, но не сигмоидальную функцию. Есть ли какой-нибудь возможный способ для меня иметь другую функцию для выходного слоя?
Аналогично: если я использую act.fct = 'logistic'
Я получу функцию передачи логистической сигмоиды по всей сети, что даст мне правильную функцию для выходного слоя, но не подходит для скрытых слоев. Который снова только принять меня на полпути.
У меня есть грубая альтернатива для решения этой проблемы, метод, который я предпочел бы не использовать. Должно быть возможно использовать err.fct =
и создать настраиваемую функцию ошибок, которая использует линейный вывод и пропускает его через желаемую сигмоидальную функцию для вывода. Затем я запускаю вывод из compute
Команда через сигмовидную функцию, отдельно. Но это похоже на хлопоты, и, вероятно, я буду путаться где-то по пути. Любое правильное / лучшее решение для этого?
1 ответ
Это не похоже на пакет R neuralnet
поддерживает функции активации в скрытых слоях. Проверьте пакет keras
чтобы решить это для вас.
model <- keras_model_sequential()
model %>%
layer_dense(units = 100, activation = 'tanh') %>%
layer_dropout(rate = 0.2) %>%
layer_dense(units = 1, activation = 'sigmoid')