кажется, что вы теряете почти всю пространственную информацию на изображении в первых двух слоях из-за пройденных вами шагов.
ваш model.summary()
показывает проблему:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 19, 19, 32) 1568
_________________________________________________________________
dropout_1 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
batch_normalization_1 (Batch (None, 19, 19, 32) 128
_________________________________________________________________
conv2d_2 (Conv2D) (None, 3, 3, 64) 32832
_________________________________________________________________
dropout_2 (Dropout) (None, 3, 3, 64) 0
_________________________________________________________________
batch_normalization_2 (Batch (None, 3, 3, 64) 256
_________________________________________________________________
conv2d_3 (Conv2D) (None, 1, 1, 128) 131200
_________________________________________________________________
dropout_3 (Dropout) (None, 1, 1, 128) 0
_________________________________________________________________
batch_normalization_3 (Batch (None, 1, 1, 128) 512
_________________________________________________________________
global_max_pooling2d_1 (Glob (None, 128) 0
_________________________________________________________________
dense_1 (Dense) (None, 128) 16512
_________________________________________________________________
dense_2 (Dense) (None, 4) 516
=================================================================
Total params: 183,524
Trainable params: 183,076
Non-trainable params: 448
то, что вы видите, - это мгновенное уменьшение размера тензора с 200 на исходном изображении до 19 после первой свертки и до 3 после второй.мы ожидаем гораздо более постепенного уменьшения размера, чтобы реально использовать преимущество сверточных слоев.
, если вы сохраните свой код как есть и измените все шаги на (2, 2)
, вы получите гораздо большеразумная структура:
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 100, 100, 32) 1568
_________________________________________________________________
dropout_1 (Dropout) (None, 100, 100, 32) 0
_________________________________________________________________
batch_normalization_1 (Batch (None, 100, 100, 32) 128
_________________________________________________________________
conv2d_2 (Conv2D) (None, 50, 50, 64) 32832
_________________________________________________________________
dropout_2 (Dropout) (None, 50, 50, 64) 0
_________________________________________________________________
batch_normalization_2 (Batch (None, 50, 50, 64) 256
_________________________________________________________________
conv2d_3 (Conv2D) (None, 25, 25, 128) 131200
_________________________________________________________________
dropout_3 (Dropout) (None, 25, 25, 128) 0
_________________________________________________________________
batch_normalization_3 (Batch (None, 25, 25, 128) 512
_________________________________________________________________
global_max_pooling2d_1 (Glob (None, 128) 0
_________________________________________________________________
dense_1 (Dense) (None, 128) 16512
_________________________________________________________________
dense_2 (Dense) (None, 4) 516
=================================================================
Total params: 183,524
Trainable params: 183,076
Non-trainable params: 448
_________________________________________________________________