Читаете картинку (`cv2.imread(img_path)[:, :, ::-1]`, делаете аналогичный препроцессинг (посмотрите, что внутри `ImageDataGenerator`), загружаете модель (`keras.model.load_model`, кажется) и предсказываете (`model.predict(np.expand_dims(img, 0)`)
В большинстве задач смотреть в исходники, чтобы разобраться с основами - хорошая идея, но читать код tf для понимания нейросетей - это чересчур. Фреймворки такого уровня слишком оптимизированы, а оптимизации ведут к усложнению кода.
Кастомизировать можно довольно много, можно смело пользоваться. На каком-то этапе, возможно, самому захочется большей гибкости, и тогда придется или дописывать куски на tf, или уходить на pytorch.
Посмотрите, что именно потребляет память. С дивана кажется, что это огромные матрицы внутии CountVectorizer и TfidfTransformer; если это так, можно, например, на сабсете сначала подобрать наиболее сильные фичи, а потом слабые отфильтровать вместо со стоп-словами. Или посмотреть в сторону hasing trick, как в https://scikit-learn.org/stable/modules/generated/...
Обучающая выборка в любом случае должна содержать и положительные, и отрицательные примеры.
Делать один нейрон с сигмоидой в конце или два с софтмаксом - в целом все равно.
Для ответа на такой вопрос не хватает логов обучения. Причем не только по трейну, но и по валидации (судя по коду, валидации сейчас вообще нет).
Гипотезы:
- лучше использовать хотя бы 2-3 сверточных слоя со свертками 3*3, чем один 8*8, т.к. это обеспечит больще нелинейности;
- learning rate = .25 может быть слишком большим, так что в итоге сеть начинает осциллировать вокруг локального минимума.