lcc*_*lxe 5 classification conv-neural-network keras
我正在使用Keras构建一个多类(3个类)图像分类器。我用大约2000张图像的数据集训练了以下模型(1500次训练/ 500次验证)。
batch_size = 128
nb_classes = 3
nb_epoch = 25
img_rows, img_cols = 128, 128
input_shape = (1, img_rows, img_cols)
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
model = Sequential()
model.add(Convolution2D(32, 5, 5, border_mode='same', input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(64, 5, 5, border_mode='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(nb_classes, activation='softmax'))
lrate = 0.001
decay = lrate/nb_epoch
sgd = SGD(lr=lrate, momentum=0.9, decay=decay, nesterov=False)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
history = model.fit(X_train, Y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
validation_data=(X_test, Y_test),
shuffle=True,
callbacks=early_stopping)
Run Code Online (Sandbox Code Playgroud)
我在另一个单独的图像块上(除了2000个数据集)实现了95%的训练精度,92%的验证精度和94%的图像。
因此,该模型似乎分类合理。但是,我的问题是输入图像的预测概率(通过函数predict_proba()获得)始终为1.0或0.0。同样,如果我输入的图像不属于这3个类别中的任何一个,我会期望一些低概率(在最相似的类别中可能更高),但是我仍然在其中一个类别中获得1.0,而在一个类别中获得0.0其他。
是什么原因造成的?在我看来,没有过度拟合的地方。该模型有问题吗?难道是每个类别的图像在它们之间都非常相似,所以该模型很快就对其决策过于自信了吗?