Хорошая тренировка на модели дает плохие результаты - PullRequest
0 голосов
/ 30 января 2020

У меня есть этот набор данных изображений, относящихся к 6 классам. Я разбил данные на тренировочный и тестовый набор с размером теста 10%. Я использую ImageDataGenerator для загрузки и дополнения моих данных. Здесь я создаю 2 генератора. Один для обучения и один для проверки, который является подмножеством обучающих данных.

# Create train_generator

train_generator = train_datagen.flow_from_directory(
    train_path,  # Path to data
    target_size=(30, 30),  # Average target size (32 + 28)/2 = 30
    batch_size=32,  # Batch size
    class_mode='categorical',  # Categorical Class mode
    classes=classes,  # Classes
    subset='training',  # Training Subset
    color_mode='grayscale'
)
# Create validation_generator

validation_generator = train_datagen.flow_from_directory(
    train_path,  # Path to data
    target_size=(30, 30),  # Average target size
    batch_size=16,  # Batch Size
    class_mode='categorical',  # Categorical Class mode
    classes=classes,  # Classes
    subset='validation',  # Validation Subset
    color_mode='grayscale'
)

Теперь я обучил простую самодельную модель для 100 эпох.

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 28, 28, 128)       1280      
_________________________________________________________________
activation (Activation)      (None, 28, 28, 128)       0         
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 14, 14, 128)       0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 12, 12, 64)        73792     
_________________________________________________________________
activation_1 (Activation)    (None, 12, 12, 64)        0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 4, 4, 32)          18464     
_________________________________________________________________
activation_2 (Activation)    (None, 4, 4, 32)          0         
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 2, 2, 32)          0         
_________________________________________________________________
flatten (Flatten)            (None, 128)               0         
_________________________________________________________________
dense (Dense)                (None, 128)               16512     
_________________________________________________________________
activation_3 (Activation)    (None, 128)               0         
_________________________________________________________________
dropout (Dropout)            (None, 128)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 6)                 774       
_________________________________________________________________
activation_4 (Activation)    (None, 6)                 0         
=================================================================
Total params: 110,822
Trainable params: 110,822
Non-trainable params: 0

История обучения пошла так. Training Results

После этого я создаю тестовый генератор, подобный

test_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
    test_path,  # Path to data
    target_size=(30, 30),  # Average target size (32 + 28)/2 = 30
    batch_size=32,  # Batch size
    class_mode='categorical',  # Categorical Class mode
    classes=classes,  # Classes
    color_mode='grayscale'
)

Я делаю прогнозы, используя этот генератор

#Confution Matrix and Classification Report
Y_pred = model.predict_generator(test_generator, test_generator.n // test_generator.batch_size+1)
y_pred = np.argmax(Y_pred, axis=1)

Теперь, когда Я делаю матрицу путаницы и отчет о классификации, используя эти прогнозы, я получаю очень плохие результаты.

Confusion Matrix:

[[166  31   1 140 135 152]
 [ 33   4   0  20  25  27]
 [ 17   1   0  10  11  10]
 [130  25   1 111 115 142]
 [126  17   2 107  81 124]
 [153  24   1 141 129 159]]
Classification Report:

              precision    recall  f1-score   support

         Bag       0.27      0.27      0.27       625
      Sandal       0.04      0.04      0.04       109
  automobile       0.00      0.00      0.00        49
        bird       0.21      0.21      0.21       524
       truck       0.16      0.18      0.17       457
  Ankle boot       0.26      0.26      0.26       607

    accuracy                           0.22      2371
   macro avg       0.16      0.16      0.16      2371
weighted avg       0.22      0.22      0.22      2371

Можете ли вы указать мне, если я делаю что-то не так, или помочь мне решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...