Ich benutze ein angepasstes LeNet-Modell in Keras, um eine binäre Klassifizierung zu machen. Ich habe ungefähr 250.000 Trainingsproben im Verhältnis 60/40. Mein Modell trainiert sehr gut. In der ersten Epoche erreicht die Genauigkeit 97 Prozent mit einem Verlust von 0,07. Nach 10 Epochen ist die Genauigkeit über 99 Prozent mit einem Verlust von 0,01. Ich verwende einen CheckPointer, um meine Modelle zu speichern, wenn sie sich verbessern.Keras: Modellgenauigkeit fällt nach Erreichen von 99 Prozent Genauigkeit und Verlust 0,01
Um die 11. Epoche herum sinkt die Genauigkeit auf etwa 55 Prozent mit einem Verlust von etwa 6. Wie könnte das möglich sein? Liegt es daran, dass das Modell nicht genauer sein kann und versucht, bessere Gewichte zu finden, dies aber völlig versäumt?
Mein Modell ist eine Anpassung an die Lenet Modell:
lenet_model = models.Sequential()
lenet_model.add(Convolution2D(filters=filt_size, kernel_size=(kern_size, kern_size), padding='valid',\
input_shape=input_shape))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Convolution2D(filters=64, kernel_size=(kern_size, kern_size), padding='valid'))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Convolution2D(filters=128, kernel_size=(kern_size, kern_size), padding='valid'))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Flatten())
lenet_model.add(Dense(1024, kernel_initializer='uniform'))
lenet_model.add(Activation('relu'))
lenet_model.add(Dense(512, kernel_initializer='uniform'))
lenet_model.add(Activation('relu'))
lenet_model.add(Dropout(0.2))
lenet_model.add(Dense(n_classes, kernel_initializer='uniform'))
lenet_model.add(Activation('softmax'))
lenet_model.compile(loss='binary_crossentropy', optimizer=Adam(), metrics=['accuracy'])
Fällt die Trainingsgenauigkeit oder die Validierungsgenauigkeit? Es kann nicht sein, dass es nur neue Gewichte findet, da der Gradientenabfall nicht nur die Gewichte so plötzlich ändern lässt. – michetonu
Das Modell ist für alle Variablen trainiert, daher verwende ich in diesem Fall keine Validierungsdaten. –
Versuchen Sie, 'loss' in' categorical_crossentropy' zu ändern. Oder ändern Sie den Ausgang, um "dim = 1" und "activation =" softmax "' zu haben. –