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
.
Dann, wenn es läuft die Berechnung der Genauigkeit es furchtbar schlecht geht:
. 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
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