Come applicare Softmax come funzione di attivazione in Perceptron multistrato in scikit-learn? [chiuso]


9

Devo applicare la funzione di attivazione di Softmax al Perceptron multistrato in scikit. La documantazione di scikit sull'argomento dei modelli di rete neurale (supervisionato) afferma che "MLPClassifier supporta la classificazione multi-classe applicando Softmax come funzione di output". La domanda è: come applicare la funzione?

Nel codice di seguito, quando aggiungo il Softmax sotto il parametro di attivazione non accetta.

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)

Il codice di errore è:

ValueError: l'attivazione 'Softmax' non è supportata. Le attivazioni supportate sono ('identità', 'logistica', 'tanh', 'relu').

Esiste un modo per applicare la funzione di attivazione di Softmax per la classificazione multi-classe in scikit-learn?

Risposte:


7

Suppongo che la funzione Softmax venga applicata quando si richiede una previsione di probabilità chiamando il metodo mlp.predict_proba(X).

Per supportare la mia supposizione ho sviluppato questo piccolo esperimento:

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]))

Si noti che, indipendentemente dai valori inseriti predict_proba(), il vettore di probabilità di output somma sempre fino a 1. Ciò può essere ottenuto solo dalla funzione di attivazione di Softmax (Utilizzando un'attivazione diversa da Softmax, non è garantito che la somma delle attivazioni nel finale il livello sarà esattamente uno, specialmente per un campione invisibile).

Se la mia ipotesi è corretta, guardando la documentazione non riesco a trovare alcun metodo per ottenere l'output della rete prima di Softmax ... Forse perché questa classe è destinata esclusivamente alla classificazione (non alla regressione o ad altre configurazioni fantasiose).


4

MLPClassifier può essere utilizzato per "classificazione multiclasse", "classificazione binaria" e "classificazione multilabel". Quindi il livello di output viene deciso in base al tipo di Y:

  1. Multiclasse : il livello più esterno è il livello softmax

  2. Multilabel o classe binaria : il livello più esterno è la logistica / sigmoide.

  3. Regressione : il livello più esterno è l'identità

Parte del codice di sklearn utilizzato in MLPClassifier che lo conferma:

        # 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. Classificazione multiclasse: per una caratteristica X, può esserci solo una classe. ad es. Analisi del sentimento Dato un testo (X), l'uscita (Y) è positiva, neutra o negativa. Binario è un caso di Multiclass in cui ci sono solo 2 uscite possibili.
  2. Classificazione multilivello: per una caratteristica X, possono esserci più classi.

1

Non posso essere d'accordo con la risposta di Daniel Lopez. Nel mio caso, la risposta predict_proba () non restituisce risultati softmax.

La risposta di TrideepRath può facilmente risolvere questo problema. Per applicare softmax, definisci out_activation_:

your_model.out_activation_ = 'softmax'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.