Как использовать DBN для восстановления изображений с разреженной матрицей с шаблоном затухания

У меня есть набор данных, содержащий изображения размером 30 х 15 пикселей. В этом наборе данных есть следы, идущие слева направо с некоторым изменением в направлении y. Трассировки обычно начинаются с (20, 0). Каждый следующий пиксель - один справа и псевдослучайно один сверху, снизу или одинаковой высоты. Например, следующий массив содержит правдоподобные точки, идущие вправо [(19, 1), (20, 1), (21, 1)].

Теперь я хочу обучить глубокую веру, состоящую из 2-х слоев машин с ограниченным движением Больцмана (1200 и 2400 фильтров) на полных трассах. Тестовый набор данных состоит из похожих (но не идентичных) трасс, но трасса составляет только половину длины.

Затем я пытаюсь использовать генеративные свойства DBN для прогнозирования оставшихся пикселей.

Сначала я взял сеть, которая может предсказывать MNIST-подобные изображения как проверку работоспособности и отправную точку. Это сработало хорошо. Пожалуйста, смотрите изображение ниже. Изображение: воссоздание MNIST-подобных изображений. Слева: полный след; Середина: половина следа; Справа: сгенерированное изображение из сети

Затем я изменил сеть, сгенерировал ранее описанные входные данные и обучил сеть. При удалении левой части данных сеть может повторно генерировать данные (хотя, не совсем верно, она генерирует пиксели). Пожалуйста, смотрите изображение ниже.

Изображение: воссоздание следа слева. Слева: полный след; Середина: половина следа; Справа: сгенерированное изображение из сети

Теперь я пытаюсь воссоздать направо. Иногда генерируется один пиксель, чаще всего ничего не генерируется. Пожалуйста, смотрите изображение ниже. Изображение: воссоздание следа справа. Слева: полный след; Середина: половина следа; Справа: сгенерированное изображение из сети

Чтобы убедиться, что сеть действительно чему-то научилась, я визуализировал первые 20 фильтров. Они показывают разветвление от (20,0). Это образец того, чего я ожидал, и он показывает мне, что сеть чему-то научилась. Пожалуйста, смотрите изображение ниже. Изображение: визуализация разного веса

Чтобы убедиться, что моя сеть действительно может генерировать похожие данные, я создал набор данных с горизонтальными полосами. Я разрезал столбики пополам и позволил сети генерировать оставшиеся пиксели. Это может сделать это без проблем. Пожалуйста, смотрите изображение ниже. Слева: полный след; Середина: половина следа; Справа: сгенерированное изображение из сети

Мой исходный набор данных содержит только 0 или 1 в качестве значений в переменной с плавающей запятой. Одна из моих догадок состоит в том, что он не может пройти определенный порог для перехода от 0 до 1. Я также попытался назначить равномерные случайные значения между 0 и 1. В результате фактически удаляются пиксели. (см. изображение ниже) Слева: полный след; Середина: половина следа; Справа: сгенерированное изображение из сети

Вес также кажется менее интенсивным:

Вопрос: Что я должен изменить, чтобы изображение восстанавливало недостающие пиксели справа?

Примечание. Учитывая фильтры, показывающие шаблоны, которые я ожидал, я не думаю, что тренировка дольше / тренировка с большим количеством данных / углубление сети / изменение скорости обучения - это обязательно ответ, но я не могу исключить это

Возможные идеи:

  • Надуйте веса на правой стороне
  • Вынуждайте / поощряйте (каким-то образом) больше изменений в изображении / снижайте порог изменения (каким-то образом)
  • Создайте набор данных, в котором значение пикселей в трассе увеличивается и уменьшается при движении вправо (в отличие от случайного назначения)

PS Советы по альтернативным сетям в порядке, но я действительно ищу решение с использованием DBN/RBM

0 ответов

Другие вопросы по тегам