Keras:模型精度在达到99%准确度和损失0.01后下降

时间:2017-06-12 07:14:03

标签: python machine-learning neural-network deep-learning keras

我在keras中使用改编的LeNet模型进行二元分类。我有大约250,000个训练样本,比例为60/40。我的模型训练得很好。第一个时期的准确率达到97%,损失为0.07。在10个时期之后,准确度超过99%,损失0.01。我正在使用CheckPointer来保存我们的模型。

大约在第11个时期,准确度下降到55%左右,损失大约6个。如何,这可能吗?是因为模型不能更准确,它试图找到更好的权重,但完全没有这样做?

我的模型是对LeNet模型的改编:

lenet_model = models.Sequential()
lenet_model.add(Convolution2D(filters=filt_size, kernel_size=(kern_size, kern_size), padding='valid',\
                        input_shape=input_shape))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Convolution2D(filters=64, kernel_size=(kern_size, kern_size), padding='valid'))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Convolution2D(filters=128, kernel_size=(kern_size, kern_size), padding='valid'))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Flatten())
lenet_model.add(Dense(1024, kernel_initializer='uniform'))
lenet_model.add(Activation('relu'))
lenet_model.add(Dense(512, kernel_initializer='uniform'))
lenet_model.add(Activation('relu'))
lenet_model.add(Dropout(0.2))
lenet_model.add(Dense(n_classes, kernel_initializer='uniform'))
lenet_model.add(Activation('softmax'))

lenet_model.compile(loss='binary_crossentropy', optimizer=Adam(), metrics=['accuracy'])

1 个答案:

答案 0 :(得分:5)

问题在于应用binary_crossentropy损失,而在这种情况下应该应用categorical_crossentropy。另一种方法是留下binary_crossentropy损失,但要将输出更改为dim=1并激活为sigmoid。奇怪的行为来自这样一个事实:使用binary_crossentropy实际上解决了多类二进制分类(有两个类)而你的任务是单个类二进制分类。