Итак, мой вопрос, как следует из названия, касается моей модели, которая застыла с точностью около 0,33.
Моя модель сделана из cnn и 3 плотных слоев, и это выглядит следующим образом:
model = Sequential()
model.add(Conv2D(16, kernel_size=(3, 3), input_shape=(580, 360, 1), padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(16, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten()) # Flattening the 2D arrays for fully connected layers
model.add(Dense(512, activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Dense(364, activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Dense(266, activation='softmax'))
optimizer = keras.optimizers.SGD(lr=0.00001) # I've tried with default as well as with bigger lr
model.compile(optimizer='SGD', loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(trainDataset, epochs=40)
Я пробовал как по умолчанию, так и с большей скоростью обучения. Я пробовал использовать разные оптимизаторы, а также разные шаги на Conv2D
, а также меньше / больше Conv2D
. Я считаю, что эти показатели и функции потерь должны быть наиболее подходящими, хотя я не уверен.
Вот как все заканчивается:
205/209 [============================>.] - ETA: 0s - loss: 2.3203 - accuracy: 0.3491
206/209 [============================>.] - ETA: 0s - loss: 2.3203 - accuracy: 0.3491
207/209 [============================>.] - ETA: 0s - loss: 2.3203 - accuracy: 0.3491
208/209 [============================>.] - ETA: 0s - loss: 2.3202 - accuracy: 0.3490
209/209 [==============================] - 52s 248ms/step - loss: 2.3193 - accuracy: 0.3491
Есть ли у кого-нибудь предложения? Кроме того, как я могу найти наиболее подходящий batch_size
, а также лучший kernel_size
/ strides
?
Заранее спасибо!
Версии:
Keras : 2.3.1 Tensorflow-GPU: 2.0.0 CUDA: 10.1 Python: 3.7