У меня есть набор данных, похожий на этот
(7500, 200, 30, 3)
, что 7500 выборок (есть тензор формы 200,30,3), который связан с данными CSI (тип данных Wi-Fi для распознавания жестов). Он имеет 150 различных меток (жестов), цель которых состоит в классификации
Я использовал CNN by keras для классификации, я столкнулся с огромным переоснащением
def create_DL_model():
# input layer
csi = Input(shape=(200,30,3))
# first feature extractor
x = Conv2D(64, kernel_size=3, activation='relu',name='layer1-01')(csi)
x=BatchNormalization()(x)
x = MaxPooling2D(pool_size=(2, 2),name='layer1-02')(x)
x = Conv2D(64, kernel_size=3, activation='relu',name='layer1-03')(x)
x=BatchNormalization()(x)
x = MaxPooling2D(pool_size=(2, 2),name='layer1-04')(x)
x=BatchNormalization()(x)
x = Conv2D(64, kernel_size=3, activation='relu',name='layer1-05',padding='same')(x)
x=Conv2D(32, kernel_size=3, activation='relu',name='layer1-06',padding='same')(x)
x=Conv2D(64, (3,3),padding='same',activation='relu',name='layer-01')(x)
x=BatchNormalization()(x)
x=MaxPool2D(pool_size=(2, 2,),name='layer-02')(x)
x=Conv2D(32, (3,3),padding="same",activation='relu',name='layer-03')(x)
x=BatchNormalization()(x)
x=MaxPool2D(pool_size=(2, 2),name='layer-04')(x)
x=Flatten()(x)
x=Dense(16,activation='relu')(x)
keras.layers.Dropout(.50, seed=1)
probability=Dense(150,activation='softmax')(x)
model= Model(inputs=csi, outputs=probability)
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
return model
как видите, я использовал выпадение для плотного слоя, раннюю остановку и нормализацию партии для борьбы с переоснащением, как вы все еще видите, есть проблема
после перекрестной проверки у меня точность около 70 (некоторые бумаги получили точность 90 процентов, однако у нас есть 150 этикеток, и кажется, что 90 процентов это действительно хороший результат, они использовали мета-обучение, которое я не мог использовать), есть ли способ, которым вы можете порекомендовать
большое спасибо