Почему моя модель CNN keras не дает точности? - PullRequest
0 голосов
/ 08 мая 2020

Итак, мой вопрос, как следует из названия, касается моей модели, которая застыла с точностью около 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...