Я пытаюсь классифицировать сигналы временных рядов с помощью глубокого обучения. Я создаю графики повторения как цветные изображения RGB. Для классификации я пробую трансфертное обучение и случайно выбрал VGG16. Я выполняю предварительную обработку с помощью функции tf.keras.applications.preprocess_input (x) в тензорном потоке для vgg16 и передаю ее в [0,255] масштабированные изображения в качестве входных данных с размером 140,140. Моя проблема - бинарная классификация, и соотношение классов у меня одинаковое. Хотя тренировка кажется очень хорошей, я получаю очень низкую точность теста. Я изменил верхний слой классификации и инициализировал его весами "imag enet". Обучаем только верхний классификационный слой.
Model: "vgg16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 140, 140, 3)] 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 140, 140, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 140, 140, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 70, 70, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 70, 70, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 70, 70, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 35, 35, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 35, 35, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 35, 35, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 35, 35, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 17, 17, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 17, 17, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 17, 17, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (None, 17, 17, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 8, 8, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 8, 8, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 8, 8, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 8, 8, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 4, 4, 512) 0
=================================================================
Total params: 14,714,688
Trainable params: 0
Non-trainable params: 14,714,688
_________________________________________________________________
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 140, 140, 3)] 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 140, 140, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 140, 140, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 70, 70, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 70, 70, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 70, 70, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 35, 35, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 35, 35, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 35, 35, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 35, 35, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 17, 17, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 17, 17, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 17, 17, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (None, 17, 17, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 8, 8, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 8, 8, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 8, 8, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 8, 8, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 4, 4, 512) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 8192) 0
_________________________________________________________________
dense_3 (Dense) (None, 512) 4194816
_________________________________________________________________
dense_4 (Dense) (None, 128) 65664
_________________________________________________________________
dense_5 (Dense) (None, 2) 258
=================================================================
Total params: 18,975,426
Trainable params: 4,260,738
Non-trainable params: 14,714,688
_________________________________________________________________
Также я получаю эти две кривые:
По результатам тестов я получаю очень низкую точность. В чем может быть причина? Это потому, что графики повторения не подходят для vgg16? Есть ли у вас какие-нибудь альтернативные предложения? Спасибо.