繁体   English   中英

Keras CNN val_accuracy、损失、准确性卡住

[英]Keras CNN val_accuracy, loss, accuracy stuck

我在 Keras 中使用 CNN 进行二元分类。 该数据集总共有近 8k 张图像,但并不平衡——一类有大约 1500 个样本,而另一类有 6500 个样本。 我没有在训练前设置随机种子。 现在,当我几天前运行这个模型时,我得到了 99% 的准确率。 前几天我又跑了一次——准确率达到了 99%。 可以肯定的是,我又运行了 5 次,每次都给我相同的结果。 现在,经过 4 天的间隔后,我再次运行它来存储参数和绘图 - 我的模型卡在 85% 的准确度和 67% 的验证准确度上。 没有什么会随着时代的变化而改变,它只是停留在那里。 我正在使用 flow_from_directory 动态加载图像,并在加载图像时执行一些增强。 我知道权重每次都是随机初始化的,这就是为什么我存储了最佳性能模型的权重。 但我只是无法重现结果。 知道这里出了什么问题吗?

model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),
                 activation='relu',
                 input_shape=(476,476,3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(256, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

model.compile(loss=binary_crossentropy,
              optimizer=Adam(learning_rate=0.0001),
              metrics=['accuracy'])

在现实世界和不平衡的数据集上达到 99% 的准确度是非常不可能的,特别是考虑到您的 ANN 远不及最先进的技术,例如在猫与狗挑战等数据集上产生接近 99% 的准确度. 另外,请注意,对于后者,您在平衡设置中拥有约 25000 张图像。

85% 的训练准确度和 67% 的验证准确度听起来是非常合理的数字,而无需了解您的数据集。 当然,您应该尝试通过增加少数类来解决不平衡问题。

那么,为什么你之前会得到 99%? 矩阵中的小故障或极端的运气。 如果它不可重现,请忘记这一点并专注于您现在获得的结果。 最后但并非最不重要的一点是,确保在任何随机过程中修复种子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM