У меня есть набор данных, содержащий изображения размером 30 x 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