为什么我的CNN keras模型会停滞其准确性?

时间:2020-05-08 03:41:19

标签: python tensorflow keras

因此,正如标题所示,我的问题是我的模型停滞在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

0 个答案:

没有答案