我正在训练一个包含 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%。随后的 epoch 不断提高训练准确性,但是,验证准确性保持在 80-90% 的范围内。
我很好奇,是否有可能在第一个 epoch 中获得高验证和训练准确率?如果我的理解是正确的,它开始时很小,然后随着每个时代的过去而稳步增加。
谢谢
编辑:重新缩放后图像大小为 150x150,小批量大小为 16。
请您参考如下方法:
是的,完全有可能在第一个 epoch 上获得高精度,然后仅进行适度的改进。
如果数据中有足够的冗余并且您在第一个 epoch 中进行了足够多的更新(wrt。模型的复杂性,这似乎很容易优化)(即您使用小的 minibatches),那么您完全有可能学习第一个时代的大部分重要内容。当您再次显示数据时,该模型将开始过度拟合训练集中特定图像引入的特性(从而提高训练准确性),但由于您没有提供任何新样本,它不会学习任何关于训练集的新内容类的基础属性。
您可以将您的训练数据视为无限流(实际上 SGD 想要享受所有收敛定理)。你认为你需要超过 50k 的样本来了解什么是重要的吗?实际上,您可以通过提供较少的数据或在某个子纪元更新后报告性能来测试模型的数据饥渴程度。
