0
votes

Apprentissage de transfert - Comportement étrange Val_Loss

J'essaie d'utiliser le transfert-apprentissage sur MobileNetv2 de Keras.application à Phyton. Mes images appartiennent à 4 classes d'une quantité de 8000, 7000, 8000 et 8000 images dans la première, deuxième, troisième et dernière classe. Mes images sont à l'échelle grise et redimensionnées de 1024x1024 à 128x128.

J'ai supprimé les couches denses de classification de MobileNetV2 et ajouté mes propres couches denses: P>

base_model = MobileNetV2(input_shape=(128, 128, 3), weights='imagenet', include_top=False)

# define classificator
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(4, activation='relu')(x)
x = Dropout(0.8)(x)
x = Dense(4, activation='relu')(x)
preds = Dense(4, activation='softmax')(x) #final layer with softmax activation

model = Model(inputs=base_model.input, outputs=preds)

for layer in model.layers[:-4]:
    layer.trainable = False

opt = optimizers.SGD(lr=0.001, decay=4e-5, momentum=0.9)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])

batch_size = 32
EPOCHS = int(trainY.size/batch_size)

H = model.fit(trainX, trainY, validation_data=(testX, testY), epochs=EPOCHS, batch_size=batch_size)


2 commentaires

Les résultats de l'image que vous avez liés ne me disent pas trop. On dirait quand un modèle général est formé et atteint la capacité. Mais je suppose que le survitesse ne commence-t-il que lorsque vous augmentez le nombre de neurones âgés de 16/8? La réduction de la taille de l'image que vous faites pourrait être très importante. Bien sûr, vous n'utilisez pas trop de détails?


Puisque vous utilisez GlobalAverePooling, est-il nécessaire pour cette grande réduction de taille?


3 Réponses :


0
votes

ici, vous avez utilisé x = décrochage (0.8) (x) ce qui signifie tomber 80% mais je suppose que vous avez besoin de 20% alors remplacez-le par x = décrochage (0.2) (x)

Aussi, s'il vous plaît aller thorugh Documentation KERAS pour le même si nécessaire.

extrait de la documentation ci-dessus

keras.layers.dropout (taux, bruit_shape = aucun, graine = aucun)

Note : Float entre 0 et 1. La fraction des unités d'entrée à chuter.


0 commentaires

0
votes

Je ne suis pas sûr de l'erreur d'en haut, mais je sais comment le réparer. J'ai complètement formé le réseau préparé (aswell une couche dense avec 4 neurones et softmax). Les résultats sont plus que satisfaisants. J'ai également testé sur VGG16, où j'ai seulement entraîné la couche de sortie dense et elle a totalement fonctionné bien.

Il semble que MobileNetv2 apprend les fonctionnalités indésirables pour mon ensemble de données. Mes ensembles de données sont des images radar, qui ressemblent beaucoup artificiellement (distribution de Choi Williams de 'LPI'-Signaux). D'autre part, ces images sont très faciles (elles sont basiques juste des bords dans une image en niveaux de gris), il est donc toujours difficile pour moi pourquoi l'apprentissage de transfert de modèle ne fonctionne pas pour MobileNetv2).


0 commentaires

0
votes

pourrait être le résultat de votre taux d'abandon scolaire étant élevé. Vous ne montrez pas vos générateurs de données, donc je ne peux pas dire s'il y a un problème là-bas, mais je soupçonne que vous devez compiler en utilisant

loss='sparse_categorical_crossentropy'


0 commentaires