0

Ich versuche, eine Klassifizierung mit sechs Klassen mit CNNs zu tun. Das erste Problem, das ich habe, ist, dass der Validierungsverlust und die Genauigkeit hoch beginnen. Es scheint, dass, bis es einen niedrigeren Wert erreicht, weder Training, noch Validierungsgenauigkeit berechnet wird, da es im selben Wert festsitztMein Netzwerk prognostiziert nur eine Klasse

(training start).

Dann, wenn es läuft die Berechnung der Genauigkeit es furchtbar schlecht geht:

half training. Ich bin mit dem folgenden Netz:

inp = Input(shape=input_shape) 
out = Conv2D(16, (5, 5),activation = 'relu', kernel_initializer='glorot_normal', kernel_regularizer=regularizers.l2(0.01), padding='same')(inp) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Dropout(0.5)(out) 

out = Conv2D(32, (3, 3),activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Dropout(0.5)(out) 

out = Conv2D(32, (3, 3),activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Dropout(0.5)(out) 

out = Conv2D(64, (3, 3), activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Conv2D(64, (3, 3),activation = 'relu', kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 

out = Conv2D(128, (3, 3), activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Conv2D(128, (3, 3),activation = 'relu', kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Conv2D(256, (3, 3), activation = 'relu',kernel_initializer='glorot_normal',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Conv2D(256, (3, 3), activation = 'relu',kernel_initializer='glorot_normal', kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Flatten()(out) 
out = Dropout(0.5)(out) 
dense1 = Dense(6, activation="softmax")(out) 
model = Model(inputs = inp, outputs = dense1) 

ich überprüft haben, dass die Etiketten korrekt sind, und die Bilder sind auch in Ordnung. Die Ausgabe des Netzwerks ist immer dieselbe Klasse (was übrigens die Klasse mit weniger Bildern ist).

Ich bin mit Adam Optimierer mit lr = 1e-5

+3

Sie haben so viel von Regularisierung verwendet, dass das Netzwerk versagt haben, etwas zu lernen. Entfernen Sie alle Kernel-Regularizer. Entfernen Sie außerdem den Dropout von den Conv-Blöcken ab sofort. Beginnen Sie mit dem Training und wenn Sie Überanpassung sehen, beginnen Sie mit dem Dropout in Conv-Blöcken – Nain

Antwort

1

den Code scheint für 6 Klasse Klassifizierung in Ordnung. Aber ich denke, Ihr Netzwerk hat zu viele Dropout-Layer. Und der größte Teil des Signals reicht nicht bis zum Ende. Haben Sie in Ihrem Dataset ein einfacheres Netzwerk ausprobiert?

Versuchen Sie dies für den ersten Ansatz bei der Ausbildung: https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py

Verwandte Themen