Я пытаюсь изучить машинное обучение на практике. Я нашел для себя упражнение по созданию нейронной сети, которая решает «японские кроссворды» для изображений фиксированного размера (128 * 128).
Очень простой пример (4 * 4) демонстрирует концепцию: черно-белое изображение, закодированное сверху и левые матрицы. Число в матрице означает продолжение длины черной линии. Легко доказать, что левая и верхняя матрица имеют размерность при max (N * (N / 2)) и ((N / 2) * N) соответственно.
У меня есть генератор python, который создает случайные черно-белые изображения и 2 уменьшенные матрицы. Верхняя и левая матрицы подаются как входные (левый транспонирован, чтобы соответствовать верхнему), а черно-белые как ожидаемый результат. Ввод трактуется как 3-мерный (128 * 64 * 2), где 2 - сверху и слева соответственно. Ниже приведена моя текущая топология, которая пытается построить функцию (128 * 64 * 2) -> (128, 128, 1)
Модель: «модель»
Layer (тип) Параметр формы вывода #
interlaced_reduce (InputLaye [(None, 128, 64, 2)] 0
small_conv (Conv2D) (None, 128, 64, 32) 288
leaky_re_lu (LeakyReLU) (Нет, 128, 64, 32) 0
medium_conv (Conv2D) (Нет, 128, 64, 64) 8256
leaky_re_lu_1 (LeakyReLU) (Нет, 128, 64, 64) 0
large_conv (Conv2D) (Нет, 128, 64, 128) 32896
leaky_re_lu_2 (LeakyReLU) (Нет, 128, 64, 128) 0
up_sampling2d (UpSampling2D) (Нет, 128, 128, 128) 0
выпадение (Dropout) (Нет, 128, 128, 128) 0
плотный (Плотный) (Нет, 128, 128, 1) 129
Всего параметров: 41569 Обучаемые параметры: 41569 Необучаемые параметры: 0
После тренировки на 50 изображениях I получил следующую статистику c (обратите внимание, я безуспешно пытался нормализовать входные матрицы до [0,1], текущая статистика c демонстрирует ненормализованный случай):
.. . Эпоха 50/50 2/2 [==============================] - 1 с 687 мс / шаг - потеря: 18427,2871 - mae: 124.9277
Тогда прогноз дает следующее:
Вы можете увидеть слева ожидаемое случайное изображение и справа - результат предсказания. В прогнозировании я намеренно использую изображение в оттенках серого, чтобы понять, насколько мой результат близок к целевому. Но, как видите, прогноз далек от ожидаемого и близок к исходной форме матриц сокращения сверху / слева. Итак, мои вопросы:
1) Какие слои мне не хватает?
2) Что нужно улучшить в существующей топологии?
ps это cross post от Cross Validated Stackexchange, потому что никто даже не просматривал вопрос об этом сайте