我正在使用Keras和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
这是一个二分类问题,但我一直收到消息Received a label value of 1 which is outside the valid range of [0, 1)
,这让我感到困惑。有什么建议吗?
回答:
Range [0, 1)
表示0到1之间的所有数字,不包括1。因此1不在[0, 1)范围内。
我不完全确定,但问题可能是因为您选择的损失函数。对于二分类问题,binary_crossentropy
应该是更好的选择。