如何在不均匀的多类数据集上使用数据扩充?

时间:2018-06-04 19:37:51

标签: python machine-learning neural-network keras conv-neural-network

我在每个类中都有12个类(图像)和不均匀的分布式数据。

它们如下(所有图像):

X1 = 16

X2 = 203

X3 = 192

X4 = 220

X5 = 172

X6 = 143

X7 = 22

X8 = 89

X9 = 31

X10 = 89

X11 = 10

X12 = 204

我正在尝试使用给定的数据集训练CNN。我想知道是否应该仅将数据扩充应用于具有较少数据的类或所有类?有没有人像我一样训练过类似的模特?另外,我应该使用CNN的架构?我已经使用了这个(通过对所有类应用数据扩充),但我停止了,因为准确度大约是14%(我在第一个时期之间停止了)

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape)) # input_shape = (150,150)
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(12))
model.add(Activation('sigmoid'))

任何帮助将不胜感激。如果有人有任何提示,我想听一些。它最近让我很难过。

1 个答案:

答案 0 :(得分:2)

您的数据中有12个类,共有1391个图像。您最常见的课程是X4,有220张图片(占总数据的15.8%)。 15.8%的准确度是你应该击败的基线分数。你提前停止训练,你应该训练一些时代,看看它是怎么回事。

您只有1391张图片,数据扩充是不可避免的。您可以通过对所有类进行扩充来进行实验,然后可以尝试添加类权重以查看分数是否变得更好。

你可以填写一个class_weight字典并使用它来适合你的模型:

class_weight = {0 : 1,    1: 1,    2: 5, ....}
model.fit(X_train, Y_train, nb_epoch=5, batch_size=32, class_weight=class_weight)