@Genkoder

Точность на тестовой выборке соответствует балансу классов.В чем может быть проблема?

Пробую построить нейронную сеть для классификации изображений на кошек и собак , пробовал разные архитектуры по типу Resnet50 , AlexNet ,MobileNetV2 и делал свою архитектуру , в результате не было никаких проблем с точность на тренировочных данных и на валидационных точность в районе 80-91% на тренировочных данных и 75-85% на валидационной ,но когда проверяю точность на тестовой выборке , она всегда на уровне 49-51% .И как то раз решил добавить еще один класс и точность получилось на тестовой выборке 32-34% , если добавить 5 классов то точность в районе 19-21% и баланс классов начиная с бинарной классификации 0,5 потом 0,33 и 0,2 соответственно.

Проверки :
Веса классов:
{'cat': 1.0, 'dog': 1.0}

Class Balance:
{'cat': 0.5, 'dog': 0.5}

train 4800 validation 1200


Код
from sklearn.model_selection import train_test_split
train_df, valid_df = train_test_split(data,
                                   test_size = 0.20,
                                   random_state = 41,
                                   stratify = data['labels'])
print('train', train_df.shape[0], 'validation', valid_df.shape[0])

datagen = ImageDataGenerator(rescale = 1./255,
      featurewise_center=False,
      samplewise_center=False,
        rotation_range=90,
        width_shift_range=0.1,
        height_shift_range=0.1,
        horizontal_flip=True,
        vertical_flip=True,
        shear_range = 10
)
validation_datagen = ImageDataGenerator(rescale = 1./255,
 
                                       )
train_generator = datagen.flow_from_dataframe(
    dataframe = train_df,
    directory='/content/images/train/',
   x_col='image',
    y_col='labels',
  target_size=(224,224),
   batch_size=32,
   shuffle=True,
   class_mode = 'binary',
   color_mode = 'rgb'
)

valid_generator = validation_datagen.flow_from_dataframe(
     dataframe = valid_df,
     directory='/content/images/train/',
      x_col='image',
      y_col='labels',
     target_size=(224,224),
     batch_size=32,
      shuffle=False,
      color_mode = 'rgb',
      class_mode = 'binary'
     )

backbone =  MobileNetV2(input_shape=(224,224, 3),
                    weights='imagenet',
                     include_top=False)
model = Sequential()
model.add(backbone)
model.add(GlobalAveragePooling2D())
model.add(Dense(100, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(20 activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(2, activation='sigmoid'))

model.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

model.fit(train_generator,
          steps_per_epoch=train_generator.samples // 32,
          validation_steps=valid_generator.samples // 32,
         validation_data=valid_generator, epochs=5)


Уже все перепробовал и lr увеличивал и Adam менял на sgd и в выходном слое делал 2 нейрона и убирал class_mode или менял на sparse и менял на sparse_categorical_crossentropy и архетиктуры разные менял и увеличивал датасет (было 20000 изображений), скачивал и менял разные датасеты изображений ,все равно точность соответствует балансу классов .Может быть неправильно обрабатываю изображения или надо еще как то обработать. Может вообще проблема с самим google colab ? Потому что код пишу там
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы