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)
0
valentineday 26 dic. 2019 a las 14:05

2 respuestas

La mejor respuesta

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.

2
Vivek Mehta 26 dic. 2019 a las 13:08

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.

0
De Poudelas 26 dic. 2019 a las 11:25