Использование двух разных сигмоидальных функций в Neuralnet в R - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь повторить исследование (https://www.sciencedirect.com/science/article/pii/S0957417410011711)

. В исследовании они используют две разные функции, одну для скрытого слоя и одну для вывода. На странице 5314 они пишут «Касательная передача сигмоида»функция была выбрана на скрытом слое. С другой стороны, на выходном слое была использована функция передачи логистической сигмоиды. "

Я использую пакет" neuralnet "в R.

InДля того, чтобы иметь функцию передачи касательной сигмоида для скрытого слоя, я могу использовать код:

act.fct = 'tanh'

Но это создаст проблему, что у меня тоже будет А) иметь ту же функцию для выходного слоя.

Или B) Я использую linear.output = T, который дает мне линейный выход, но не сигмовидную функцию.Есть ли какой-нибудь возможный способ для меня иметь другую функцию для выходного слоя?

Аналогично: если я использую act.fct = 'logistic', я получу функцию логистической передачи сигмоида по всей сети, давая мне правильную функцию длявыходной слой, но не подходит для скрытых слоев.Который снова только принять меня на полпути.

У меня есть грубая альтернатива для решения этой проблемы, метод, который я бы предпочел не использовать , должна быть возможность использовать err.fct = и создать настраиваемую функцию ошибок, которая использует линейнуювыводит и пропускает через желаемую сигмовидную функцию для вывода.Затем я запускаю вывод команды compute через функцию сигмоида отдельно.Но это похоже на хлопоты, и, вероятно, я буду путаться где-то по пути.Любое правильное / лучшее решение для этого?

1 Ответ

0 голосов
/ 10 декабря 2018

Не похоже, что пакет 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')
...