Amélioration des résultats de CNN [fermé
-
01-11-2019 - |
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
Pas de solution correcte