Estoy estudiando el sistema de clasificación usando keras. Keras clasifica las etiquetas al verificar cuál es el número más alto. Por ejemplo, si la salida es [0.1 0.8 0.1], clasifica la etiqueta 1 como la respuesta correcta porque es 0.8, que es el número más alto.
Pero en la clasificación binaria obtuve este resultado.
[0.642]
[0.996]
[0.976]
[0.302]
[0.963]
[0.115]
.
.
.
Pensé que Keras los clasificaría como: si el resultado [i] [0]> 0.5 devuelve 1
Pero es solo mi suposición, así que quiero saber exactamente cómo Keras clasifica los resultados binarios.
Aquí está mi código que usé.
model = Sequential()
# Step 1 - Convolution
model.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
# Step 2 - Pooling
model.add(MaxPooling2D(pool_size = (2, 2)))
# Adding a second convolutional layer
model.add(Conv2D(32, (3, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
# Step 3 - Flattening
model.add(Flatten())
# Step 4 - Full connection
model.add(Dense(units = 128, activation = 'relu'))
model.add(Dense(units = 1, activation = 'sigmoid'))
import numpy as np
print("-- Predict --")
output = model.predict_generator(test_set, steps=5)
np.set_printoptions(formatter={'float': lambda x: "{0:0.3f}".format(x)})
print(test_set.class_indices)
print(output)
2 respuestas
En su código, podemos ver model.add(Dense(units = 1, activation = 'sigmoid'))
. Entonces estamos usando sigmoid
como función de activación. si ve este enlace, verá que el rango de funciones es [0,1], así que considerando el umbral como 0.5, se asignan clases.
Si hubiera estado haciendo una clasificación de varias clases, softmax será la función de activación adecuada.
Te recomiendo que aprendas varias funciones de activación. En el ejemplo dado, está utilizando la función de activación sigmoidea que genera un rango continuo de valores entre 0 y 1. Si utiliza la función softmax, generará un vector que representa las distribuciones de probabilidad de una lista de resultados potenciales. Convierte números también conocidos como logits en probabilidades que suman uno [0.1 0.8 0.1] como usted mencionó en su pregunta.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.