¿Qué significa la salida de la función model.predict de Keras?


14

He creado un modelo LSTM para predecir preguntas duplicadas en el conjunto de datos oficial de Quora. Las etiquetas de la prueba son 0 o 1. 1 indica que el par de preguntas está duplicado. Después de construir el modelo usando model.fit, pruebo el modelo usando model.predictlos datos de prueba. La salida es una matriz de valores similar a la siguiente:

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

Solo estoy mostrando los primeros 10 valores en la matriz. No entiendo qué significan estos valores y cuál es la etiqueta predicha para cada par de preguntas.


1
Creo que tienes un problema en tu red ... las probabilidades deberían estar en la escala 0-1 ... ¡pero tienes 1.99!, Creo que tienes algo mal ...
Ghanem

Respuestas:


8

La salida de una red neuronal nunca será, por defecto, binaria, es decir, ceros o unos. La red funciona con valores continuos (no discretos) para optimizar la pérdida más libremente en el marco del descenso de gradiente.

Eche un vistazo aquí a una pregunta similar que también muestra algo de código.

Sin ningún tipo de ajustes y escalas, es probable que la salida de su red caiga en algún lugar dentro del rango de su entrada, en términos de su valor nominal. En su caso, eso parece estar aproximadamente entre 0 y 2.

Ahora podría escribir una función que convierta sus valores anteriores en 0 o 1, en función de algún umbral. Por ejemplo, escale los valores para que estén en el rango [0, 1], luego, si el valor está por debajo de 0.5, devuelva 0, si está por encima de 0.5, devuelva 1.


Gracias, yo también pensé en usar un valor umbral para clasificar las etiquetas. Pero, ¿cuál debería ser la base sobre la cual se decidió el valor umbral?
Dookoto_Sea

@Dookoto_Sea tienes que decidirlo tú mismo
Jérémy Blain

@Dookoto_Sea Tenga en cuenta que si su etiqueta es 0 o 1, su valor debe estar en ese rango, tener una escala de valores de predicción de [0, 2] es intrigante, debe cambiar la salida de su modelo
Jérémy Blain

6

Si este es un problema de clasificación, debe cambiar su red para que tenga 2 neuronas de salida.

Puede convertir etiquetas en vectores codificados en caliente utilizando

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

Luego, asegúrese de que su capa de salida tenga dos neuronas con una función de activación softmax.

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

Esto resultará en que usted model.predict(x_test_reshaped)sea ​​un conjunto de listas. Donde la lista interna es la probabilidad de que una instancia pertenezca a cada clase. Esto sumará a 1 y, evidentemente, la etiqueta decidida debería ser la neurona de salida con la mayor probabilidad.

Keras tiene esto incluido en su biblioteca, por lo que no necesita hacer esta comparación usted mismo. Puede obtener la etiqueta de clase directamente utilizando model.predict_classes(x_test_reshaped).


3
"Si este es un problema de clasificación, debe cambiar su red para que tenga 2 neuronas de salida" ... lo siento, Jah, pero no debería, puede hacerlo con una neurona y sigmoide en lugar de la función softmax.
Ghanem

@Minion, ambos métodos son esencialmente equivalentes, el umbral que de otro modo necesitarías hacer con una neurona de salida única está implícitamente incrustado en la red. Proporcionando así la salida binaria.
JahKnows

1
Sí, lo sé ... comenté solo porque mencionó: "debería cambiar su red para tener 2 neuronas de salida". .. Gracias
Ghanem

1

Las predicciones se basan en lo que alimentas como resultados de entrenamiento y la función de activación.

Por ejemplo, con una entrada 0-1 y una función de activación sigmoidea para la salida con una pérdida de crossentropía binaria, obtendría la probabilidad de un 1. Dependiendo del costo de tomar la decisión equivocada en cualquier dirección, puede decidir cómo lidiar con estas probabilidades (por ejemplo, predecir la categoría "1", si la probabilidad es> 0.5 o tal vez ya cuando es> 0.1).

(-,) Supongo que eso no fue lo que pretendías, y quizás quieras lo que mencioné en el primer párrafo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.