Як застосувати Softmax як функцію активації в багатошаровому Perceptron в scikit-learn? [зачинено]


9

Мені потрібно застосувати функцію активації Softmax до багатошарового Perceptron у scikit. Scikit documantation на тему мережевих моделей Neural ( під контролем) говорить «MLPClassifier підтримує класифікацію мульти-класу із застосуванням SoftMax в якості вихідної функції.» Питання в тому, як застосувати функцію?

У фрагменті коду нижче, коли я додаю Softmax під параметром активації, він не приймає.

MLPClassifier(activation='Softmax', alpha=1e-05, batch_size='auto',
       beta_1=0.9, beta_2=0.999, early_stopping=False,
       epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant',
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
       solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
       warm_start=False)

Код помилки:

ValueError: активація "Softmax" не підтримується. Підтримуються активації ("ідентичність", "логістика", "танх", "релу").

Чи є спосіб застосувати функцію активації Softmax для багатокласової класифікації в scikit-learn?

Відповіді:


7

Я гадаю, що функція Softmax застосовується, коли ви вимагаєте прогнозувати ймовірність, викликаючи метод mlp.predict_proba(X).

Щоб підтримати своє припущення, я розробив цей невеликий експеримент:

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
import numpy as np

X,Y = load_iris().data, load_iris().target

mlp = MLPClassifier()
mlp.fit(X, Y)

print mlp.predict([3.1,  2.5,  8.4,  2.2])
print mlp.predict_proba([3.1,  2.5,  8.4,  2.2])
print "sum: %f"%np.sum(mlp.predict_proba([3.1,  2.5,  8.4,  2.2]))

Зауважте, що незалежно від того, до яких значень підключено predict_proba(), вектор імовірності виходу завжди дорівнює 1. Це може бути досягнуто лише функцією активації Softmax (Використовуючи активацію, іншу, що Softmax не гарантує, що сума активацій у фіналі шар буде рівно один, спеціально для небаченого зразка).

Якщо я здогадуюсь правильно, дивлячись на документацію, я не можу знайти жодного способу отримати вихід з мережі перед Softmax ... Можливо тому, що цей клас призначений виключно для класифікації (а не регресії чи інших фантазійних налаштувань).


4

MLPClassifier можна використовувати для "багатокласової класифікації", "двійкової класифікації" та "багатозначної класифікації". Отже, вихідний шар визначається на основі типу Y:

  1. Мультиклас : Найвищий шар - це шар softmax

  2. Багатозначний або двійковий клас : Найвищий шар - це логістичний / сигмоїдний.

  3. Регресія : Найвищий рівень - це ідентичність

Частина коду від sklearn, що використовується в MLPClassifier, що підтверджує це:

        # Output for regression
        if not is_classifier(self):
            self.out_activation_ = 'identity'
        # Output for multi class
        elif self._label_binarizer.y_type_ == 'multiclass':
            self.out_activation_ = 'softmax'
        # Output for binary class and multi-label
        else:
            self.out_activation_ = 'logistic'
  1. Класифікація багатокласових: Для Feature X може бути лише один клас. наприклад, Аналіз почуттів З огляду на текст (X), вихід (Y) є позитивним, нейтральним чи негативним. Бінарний - це справа багатокласового, де є лише два можливі виходи.
  2. Класифікація багатознаків: Для Feature X може бути кілька класів.

1

Не можу погодитися з відповіддю Даніеля Лопеса. У моєму випадку відповідь predict_proba () не повертає програмного забезпечення softmax.

Відповідь TrideepRath може легко вирішити це питання. Для застосування softmax визначте out_activation_:

your_model.out_activation_ = 'softmax'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.