Question

Modifier 2 J'ai résolu mon problème. Le problème a été causé par la validation_generator. J'ai utilisé la méthode flow_from_directory avec shuffle = true. En modifiant la valeur en false et en appelant la méthode validation_generator.reset () avant modèle.prect_generator () pour calculer la matrice de confusion a résolu mon problème. La méthode reset () - semble être très importante.

Éditer: J'ai pu isoler un peu le problème. J'ai remarqué que la méthode Evaluat_Generator renvoie les valeurs correctes de la formation, par exemple [0,068286080902908, 0,9853515625]. Cependant, la méthode Predict_Generator () se comporte étrangement. Les résultats ressemblent à ceci:

8.8930092E-06 5.8127771E-04 3.8436747E-06 7.7528159E-07 9.9940526E-01] [1.4138629E-03 9.9854565E-01 5.4773304E-07 3.9719587E-01 2.7020766E-05 7.9189061E-07 4.9350000E-09 9.9997127E-01] ... [5.0964586E-06 4.5610027E-04 2.6184430E-06 1.6962146E-07 9.9953604E-01] 10 4.7919415E-09 1.0000000E + 00 1.4161311E-12] [2.1354626E-06 9.6519925E-06 1.9460406E-07

####

J'ai fait une classification d'images avec un CNN. La précision de l'ensemble de formation et de validation est élevée et les pertes pour les deux sont faibles. Cependant, ma matrice de confusion n'a pas la diagonale typique de la partie supérieure à gauche en bas à droite. Si je comprends correctement la matrice de confusion, j'ai beaucoup de erreurs. Alors, comment puis-je améliorer mon modèle pour obtenir de meilleurs résultats?

La distribution des échantillons de chaque classe est:

tôt: 800 Sain: 749 Late: 764 Moule de feuilles: 761 Jaune: 708

La structure du modèle:

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 
3)))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Dropout(0.15))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Dropout(0.2))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(BatchNormalization())

model.add(layers.Flatten())
model.add(layers.Dropout(0.6))
model.add(layers.Dense(150, activation='relu', 
kernel_regularizer=regularizers.l2(0.002)))
model.add(layers.Dense(5, activation='softmax'))

model.compile(loss='categorical_crossentropy',
optimizer=optimizers.Adam(lr=1e-3),
metrics=['acc'])

Ce sont la précision et les pertes de la formation:

Epoch 00067: val_loss did not improve from 0.08283
Epoch 68/200
230/230 [==============================] - 56s 243ms/step - loss: 0.0893 - 
acc: 0.9793 - val_loss: 0.0876 - val_acc: 0.9784

Epoch 00068: val_loss did not improve from 0.08283
Epoch 69/200
230/230 [==============================] - 58s 250ms/step - loss: 0.0874 - 
acc: 0.9774 - val_loss: 0.1209 - val_acc: 0.9684

Epoch 00069: val_loss did not improve from 0.08283
Epoch 70/200
230/230 [==============================] - 57s 246ms/step - loss: 0.0879 - 
acc: 0.9803 - val_loss: 0.1384 - val_acc: 0.9706

Epoch 00070: val_loss did not improve from 0.08283
Epoch 71/200
230/230 [==============================] - 59s 257ms/step - loss: 0.0903 - 
acc: 0.9783 - val_loss: 0.1352 - val_acc: 0.9728

Epoch 00071: val_loss did not improve from 0.08283
Epoch 72/200
230/230 [==============================] - 58s 250ms/step - loss: 0.0852 - 
acc: 0.9798 - val_loss: 0.1324 - val_acc: 0.9621

Epoch 00072: val_loss did not improve from 0.08283
Epoch 73/200
230/230 [==============================] - 58s 250ms/step - loss: 0.0831 - 
acc: 0.9815 - val_loss: 0.1634 - val_acc: 0.9574

Epoch 00073: val_loss did not improve from 0.08283
Epoch 74/200
230/230 [==============================] - 57s 246ms/step - loss: 0.0824 - 
acc: 0.9816 - val_loss: 0.1280 - val_acc: 0.9640

Epoch 00074: val_loss did not improve from 0.08283
Epoch 75/200
230/230 [==============================] - 57s 247ms/step - loss: 0.0869 - 
acc: 0.9774 - val_loss: 0.0777 - val_acc: 0.9882

Epoch 00075: val_loss improved from 0.08283 to 0.07765, saving model to 
C:/Users/xxx/Desktop/best_model_7.h5
Epoch 76/200
230/230 [==============================] - 56s 243ms/step - loss: 0.0739 - 
acc: 0.9851 - val_loss: 0.0683 - val_acc: 0.9851

Epoch 00076: val_loss improved from 0.07765 to 0.06826, saving model to 
C:/Users/xxx/Desktop/best_model_7.h5

Accuracy and losses confusion matrix

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top