web-dev-qa-db-fra.com

Reçu une valeur d'étiquette de 1 qui est en dehors de la plage valide de [0, 1) - Python, Keras

Je travaille sur un classificateur cnn simple utilisant des keras avec un fond tensorflow.

def cnnKeras(training_data, training_labels, test_data, test_labels, n_dim):
print("Initiating CNN")
seed = 8
numpy.random.seed(seed)
model = Sequential()
model.add(Convolution2D(64, 1, 1, init='glorot_uniform', border_mode='valid',
                        input_shape=(16, 1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(1, 1)))
model.add(Convolution2D(32, 1, 1, init='glorot_uniform', activation='relu'))
model.add(MaxPooling2D(pool_size=(1, 1)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='softmax'))
# Compile model
model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam', metrics=['accuracy'])
model.fit(training_data, training_labels, validation_data=(
    test_data, test_labels), nb_Epoch=30, batch_size=8, verbose=2)

scores = model.evaluate(test_data, test_labels, verbose=1)
print("Baseline Error: %.2f%%" % (100 - scores[1] * 100))
# model.save('trained_CNN.h5')
return None

C'est un problème de classification binaire, mais je reçois toujours le message Received a label value of 1 which is outside the valid range of [0, 1) ce qui n'a aucun sens pour moi. Des suggestions?

19
Tahjid Ashfaque

Range [0, 1) signifie chaque nombre compris entre 0 et 1, à l'exclusion 1. Donc 1 n'est pas une valeur dans la plage [0, 1).

Je ne suis pas sûr à 100%, mais le problème pourrait être dû à votre choix de fonction de perte. Pour une classification binaire, binary_crossentropy devrait être un meilleur choix.

32
Michele Tonutti

Dans la dernière couche Dense, vous avez utilisé model.add(Dense(1, activation='softmax')). Ici 1 restreint sa valeur de [0, 1) Change sa forme à l'étiquette de sortie maximale. Par exemple, votre sortie provient de l'étiquette [0,7), Puis utilisez model.add(Dense(7, activation='softmax'))

1
Shaili