Python - sklearn.MLPClassifier: Как получить выходные данные первого скрытого слоя

1

Я прошел через некоторые глубокие методы обучения и наткнулся на метод, который не использует обратное распространение (https://arxiv.org/abs/1706.02480). Основная идея этого метода состоит в том, чтобы обучить неглубокий скрытый слой, отбросить выходной слой и добавить еще один скрытый слой между обученным (первым) скрытым слоем и новым уровнем вывода. Процесс повторяется (добавление и обучение) до тех пор, пока не будет выполнен некоторый критерий. Я пытаюсь реализовать этот метод, используя классификатор MLP, предоставленный в sklearn. Проблема, с которой я сталкиваюсь, заключается в том, как получить вывод скрытых слоев. Например, если я использую

mlp = MLPClassifier()
mlp.predict(data)

он даст мне выход всей сети. Однако то, что мне нужно, - это суб-выход скрытого уровня сети. Проиллюстрировать:

вход → connection1 (вес) → скрытый слой → connection2 (вес) → вывод (-> предсказание)

То, что я сейчас требую, - это не выходное предсказание, а результат, который выходит из скрытого слоя (между скрытым слоем и соединением 2). Я знаю, что вход для скрытого слоя (между соединением1 и скрытым слоем) можно вычислить

np.matmul(data, mlp.coefs_[0]) + mlp.intercepts_[0]

Есть ли способ получить результаты скрытого слоя?

Теги:
machine-learning
scikit-learn

1 ответ

2
Лучший ответ

Вы неправильно поняли, что к чему.

Вход - это то, что вы проходите.

Первый скрытый слой состоит из параметров модели W 1 и b 1.

Результатом скрытого слоя является f (W 1T x + b 1), где f - ваша функция активации.

Затем это вход ко второму скрытому слою, который состоит из параметров модели W 2 и b 2. И так оно и есть....

Итак, если быть точным

from sklearn.neural_network._base import ACTIVATIONS
ACTIVATIONS['relu'](np.matmul(data, mlp.coefs_[0]) + mlp.intercepts_[0]))

это то, что вы ищете.

  • 0
    Так что, думаю, я все-таки был на полпути. Есть ли способ получить доступ к функции активации, определенной для классификатора sklearn mlp? mlp.activation просто дает строку, которая определена для параметра. Или я должен определить это вручную?
  • 0
    @CodyChung Смотрите документацию . Это ReLU по умолчанию. Вы можете указать любой из {'identity', 'logistic', 'tanh', 'relu'}.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню