第一个时代的验证和训练准确度很高[Keras]

时间:2018-05-19 07:25:37

标签: python tensorflow neural-network keras

我正在训练一个包含2个类和53k图像的图像分类器,并使用keras使用1.3k图像进行验证。这是神经网络的结构:

model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
              loss='binary_crossentropy', metrics=['accuracy'])

第一纪元的训练准确度从约50%提高到约85%,验证准确率达到85%。随后的时期一致地提高了训练准确度,但是,验证准确性保持在80-90%区域。

我很好奇,是否有可能在第一个时代获得高验证和训练准确性?如果我的理解是正确的,那么它开始很小并且随着每个过去的时代而稳步增加。

由于

编辑:重新缩放后图像尺寸为150x150,小批量尺寸为16。

3 个答案:

答案 0 :(得分:1)

是的,时代应该适合模型上的数据。

尝试在最后使用2个神经元,在你的Class标签上使用一个热编码! 就像我看过一个案例,我做了更好的结果,而不是二进制输出。

答案 1 :(得分:1)

使用前馈神经网络进行图像分类时,您不能指望精度超过90-95%。

您需要使用另一种称为卷积神经网络的架构,这是图像识别领域的最新技术。

使用keras构建它也非常容易,但计算上的密集程度要高于此。

如果你想坚持使用前馈层,你可以做的最好的事情就是尽早停止,但即便这样也不会让你的准确率达到90%以上。

答案 2 :(得分:1)

是的,完全有可能在第一个时代获得高精度,然后只有适度的改进。

如果数据中有足够的冗余并且您在第一个时期(即使用小型小型游艇)进行了足够的更新(例如模型的复杂性,这似乎相当容易优化),那么您完全有可能学习第一个时代的大多数重要的东西。当您再次显示数据时,模型将开始过度拟合您的火车组中特定图像引入的粒度(因此您可以提高训练准确度),但由于您没有提供任何新颖的样本,因此它不会学到任何关于你的类的基础属性。

您可以将您的训练数据视为无限流(实际上SGD希望享受所有收敛定理)。你认为你需要超过5万个样本来学习什么是重要的吗?实际上,您可以通过在一些子历元更新后提供更少的数据或报告性能来测试模型的数据饥饿程度。