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.predict
los 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.
machine-learning
python
neural-network
keras
lstm
Dookoto_Sea
fuente
fuente
Respuestas:
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.
fuente
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
Luego, asegúrese de que su capa de salida tenga dos neuronas con una función de activación 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)
.fuente
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).
fuente