Здесь есть несколько вещей, которые не правы:
- Сначала активируйте свой слой conv2d, прежде чем их объединить!->
model.add(Conv2D(128, (3, 3), input_shape=X.shape[1:], activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
или
model.add(Conv2D(128,(3,3),input_shape=X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
- Во-вторых, вам нужно активировать softmax после последнего слоя, а не раньше!Softmax используется для вычисления вероятности для каждого нейрона вашего последнего слоя, вам нужно это:
model.add(Dense(120))
model.add(Activation("softmax"))
- В-третьих, как сказал Матиас, 2 эпох совсем недостаточно, попробуйтечтобы увеличить это число!
- Четвёртого, 2-го слоя для этой классификации недостаточно, увеличьте его и измените количество фильтров, чтобы зафиксировать различные особенности на изображении
AОбщая архитектура сверточного блока может выглядеть следующим образом:
model.add(Conv2D(64, (3, 3) , padding='SAME'))
model.add(Activation("relu"))
model.add(Conv2D(64, (3, 3) , padding='SAME'))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
Вы можете манипулировать этим типом блоков по своему усмотрению, пробовать несколько блоков с различным количеством фильтров и т. д.
- В-пятых, у вас слишком много нейронов в вашей полностью подключенной сети для вашей проблемы, попробуйте более простую архитектуру, которая даст лучшие результаты за меньшее время:
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu')
model.add(Dense(128)(x)
model.add(Activation('relu'))
model.add(Dense(120))
model.add(Activation('softmax'))
Скажите мне в комментарии результатыэти изменения дали вам!