Cosa significa l'output della funzione model.predict da Keras?


14

Ho creato un modello LSTM per prevedere domande duplicate sul set di dati ufficiale di Quora. Le etichette di prova sono 0 o 1. 1 indica che la coppia di domande è duplicata. Dopo aver creato il modello usando model.fit, collaudo il modello usando model.predicti dati del test. L'output è un array di valori simile al seguente:

 [ 0.00514298]
 [ 0.15161049]
 [ 0.27588326]
 [ 0.00236167]
 [ 1.80067325]
 [ 0.01048524]
 [ 1.43425131]
 [ 1.99202418]
 [ 0.54853892]
 [ 0.02514757]

Sto solo mostrando i primi 10 valori nella matrice. Non capisco cosa significano questi valori e qual è l'etichetta prevista per ciascuna coppia di domande?


1
Penso che tu abbia problemi nella tua rete .. le probabilità dovrebbero essere in scala 0-1 .. ma tu hai 1,99!, Penso che tu abbia qualcosa di sbagliato ..
Ghanem

Risposte:


8

L'output di una rete neurale non sarà mai, per impostazione predefinita, binario, ovvero zero o uno. La rete funziona con valori continui (non discreti) al fine di ottimizzare la perdita più liberamente nel quadro della discesa del gradiente.

Dai un'occhiata qui a una domanda simile che mostra anche del codice.

Senza alcun tipo di modifica e ridimensionamento, è probabile che l'output della tua rete cada da qualche parte nell'intervallo dell'input, in termini di valore nominale. Nel tuo caso, sembra essere approssimativamente tra 0 e 2.

Ora puoi scrivere una funzione che trasforma i tuoi valori sopra in 0 o 1, in base a qualche soglia. Ad esempio, ridimensionare i valori nell'intervallo [0, 1], quindi se il valore è inferiore a 0,5, restituire 0, se superiore a 0,5, restituire 1.


Grazie, anch'io ho pensato di utilizzare un valore di soglia per classificare le etichette. Ma quale dovrebbe essere la base su cui ha deciso il valore soglia?
Dookoto_Sea

@Dookoto_Sea devi decidere tu stesso
Jérémy Blain,

@Dookoto_Sea Si noti che se l'etichetta è 0 o 1, il valore deve essere compreso in tale intervallo, con una scala dei valori di previsione di [0, 2] è interessante, è necessario modificare l'output del modello
Jérémy Blain,

6

Se questo è un problema di classificazione, dovresti cambiare la tua rete per avere 2 neuroni di output.

È possibile convertire le etichette in vettori codificati a una sola volta usando

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

Quindi assicurati che il tuo livello di output abbia due neuroni con una funzione di attivazione softmax.

model.add(Dense(num_classes, activation='softmax'))

Ciò comporterà il tuo model.predict(x_test_reshaped) essere una matrice di elenchi. Dove l'elenco interno è la probabilità di un'istanza appartenente a ciascuna classe. Questo aggiungerà fino a 1 ed evidentemente l'etichetta decisa dovrebbe essere il neurone in uscita con la più alta probabilità.

Keras lo ha incluso nella sua libreria, quindi non è necessario eseguire questo confronto da soli. Puoi ottenere l'etichetta della classe direttamente usando model.predict_classes(x_test_reshaped).


3
"Se questo è un problema di classificazione, dovresti cambiare la tua rete in modo da avere 2 neuroni in uscita." .. scusa Jah, ma non dovrebbe, può farlo con un neurone e sigmoide invece della funzione softmax.
Ghanem,

@Minion, entrambi i metodi sono sostanzialmente equivalenti, il limite che altrimenti avresti bisogno di fare con un singolo neurone di uscita è implicitamente incorporato nella rete. Fornendo così l'output binario.
Jah conosce il

1
Sì, lo so ... ho commentato solo perché ha menzionato: "dovrebbe cambiare la tua rete per avere 2 neuroni in uscita". .. grazie
Ghanem,

1

Le previsioni si basano su ciò che si inserisce come output di allenamento e sulla funzione di attivazione.

Ad esempio, con l'ingresso 0-1 e una funzione di attivazione sigmoide per l'output con una perdita binaria di crossentropia, si otterrebbe la probabilità di un 1. A seconda del costo di sbagliare la decisione in entrambe le direzioni, è quindi possibile decidere come gestire queste probabilità (ad esempio prevedere la categoria "1", se la probabilità è> 0,5 o forse già quando è> 0,1).

(-,

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.