如何训练一个小数据集(精细调整vgg16 VS小模型)

时间:2017-12-20 12:05:45

标签: deep-learning keras

我正在尝试建立一个分类器来区分3个类别(手掌,拳头和其他)。我有一个小数据集,所以我使用扩充。没有增加的收集数据集分别具有(914,887,983)样本。增强后(5481,4752,4081)样品。我使用image-aug来获取增强图像。

我跟着" Building powerful image classification models using very little data"来自Keras的教程,但模型过于贴合,我该如何解决这个问题呢?

我正在使用学习率较低的Adam优化器(lr = 1e-5)。并且只冻结前15层而不是25层。 enter image description here

- 编辑 -

逐渐退出的小型模特。

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(img_height, img_width,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(Dropout(0.2))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Dropout(0.3))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(nClasses, activation='softmax'))


model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

结果并不好。尽管测试和验证集来自同一分布,但该模型在97%的测试集上表现非常出色。

enter image description here

[4]: https://i.stack.imgur.com/GGqeG.png

我在较小的网络上尝试了学习率较低的亚当

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(img_height, img_width,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Dropout(0.3))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(nClasses, activation='softmax'))


model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.Adam(lr=1e-6),#optimizer='rmsprop',
              metrics=['accuracy'])

结果似乎更好。但是训练仍然过度拟合。我认为这是一个好的开始,不需要使用复杂的网络。 enter image description here

0 个答案:

没有答案