我正在 keras 中使用改编的 LeNet 模型来进行二元分类。我有大约 250,000 个训练样本,比率为 60/40。我的模型训练得很好。第一个 epoch 的准确率达到 97%,损失为 0.07。 10 个 epoch 后,准确率超过 99%,损失为 0.01。当模型改进时,我使用 CheckPointer 来保存模型。
在第 11 个 epoch 左右,准确率下降到 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'])