Из вашего повествования вытекают по меньшей мере два вывода: либо "что-то не то" с данными, либо выбрана неверная конфигурация модели. При работе с несбалансированными данными выручает перетасовка. Попробуйте при тренировке модели перетасовать данные [
history = model.fit(..., shuffle=True)] / flow_from_dataframe(..., shuffle=True). Я бы ориентировался на решения Keras, с которыми "расщёлкали" задачу набора MNIST [
ссылка] с высокой точностью.