Получено значение метки 1, которое находится за пределами допустимого диапазона [0, 1] - Python, Keras
Я работаю над простым cnn-классификатором, используя keras с фоном shadoworflow.
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
Это проблема двоичной классификации, но я продолжаю получать сообщение Received a label value of 1 which is outside the valid range of [0, 1)
, которое не имеет для меня никакого смысла. Любые предложения?
Ответы
Ответ 1
Range [0, 1)
означает каждое число от 0 до 1, исключая 1. Таким образом, 1 не является значением в диапазоне [0, 1).
Я не уверен на 100%, но проблема может быть связана с вашим выбором функции потерь. Для двоичной классификации binary_crossentropy
должен быть лучшим выбором.
Ответ 2
Да, спасибо, моя проблема связана с выбором функции потери
Ответ 3
В последнем слое Dense вы использовали model.add(Dense(1, activation='softmax'))
. Здесь 1 ограничивает свое значение от [0, 1)
изменяя его форму до максимальной выходной метки. Например, если вы model.add(Dense(7, activation='softmax'))
из метки [0,7)
тогда используйте model.add(Dense(7, activation='softmax'))