У меня есть этот набор данных изображений, относящихся к 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](https://i.stack.imgur.com/9Wfvx.png)
После этого я создаю тестовый генератор, подобный
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
Можете ли вы указать мне, если я делаю что-то не так, или помочь мне решить проблему.