Случайный шум для ГАН - PullRequest
2 голосов
/ 05 марта 2020

Я новичок в GAN. Я учусь моделировать GAN для генерации изображений, однако я не совсем понимаю, что именно представляет собой случайный шум, передаваемый генератору. Это случайные числа от 0 до 1 и какой должен быть его размер. Также должен ли случайный шум быть постоянным каждый раз, когда генератор работает?

Любая помощь будет признательна.

Ответы [ 4 ]

2 голосов
/ 02 апреля 2020

На github есть учебник по jupyter для ноутбуков (полное раскрытие, это мой github). (Доступные решения здесь )

Шум или, скорее, скрытая случайная величина может генерироваться в значительной степени, однако вам нравится, например, следующее:

# Generate latent random variable to feed to the generator, by drawing from a uniform distribution 
z = np.random.uniform(-1., 1., size=[batch_size, noise_dim])

Тем не менее, имеет смысл подумать о функции активации на входном слое вашего генератора, и обратите внимание на чувствительный диапазон.

Генератор использует этот вход в качестве начального числа для декодирования из этой скрытой переменной в область исходных наборов данных. Таким образом, очевидно, что одна и та же случайная величина приведет к точно такой же сгенерированной выборке.

Таким образом, вы должны постоянно рисовать новые выборки во время тренировки и не поддерживать постоянный шум.

0 голосов
/ 27 марта 2020

Случайное распределение вектора шума представляет скрытое пространство. Это не так важно для GAN, но в большей степени для автоэнкодеров. Как правило, шум генерируется из нормального распределения, но некоторые исследователи сообщают об улучшенных результатах обучения, используя сферическое распределение (извините, у меня нет удобных ссылок). Диапазон шума зависит от вашего входного слоя. Если вы используете изображения, вы, вероятно, нормализовали входы между 0 и 1 или -1 и 1, поэтому вы должны использовать соответствующий диапазон распределения для вашего вектора шума. Типичный вектор шума может быть сгенерирован следующим образом:

noise = tf.random.normal([BATCH_SIZE, noise_dim])

, где BATCH_SIZE - размер обучающего пакета (16, 32, 64, 128 ...), а noise_dim - размер вектора шума, который зависит от вашего пространства функций (я часто использую 1024 для изображений со средним разрешением).

0 голосов
/ 02 апреля 2020

Я также новичок в GAN, но недавно работаю над GAN для генерации сигнала.

Случайный шум является входом для генератора. В начале это не имеет смысла, и с помощью обучения вы пытаетесь найти для них смысл. Что касается размера, я все еще не уверен, что мой вывод правильный, поэтому я надеюсь, что другие исправят мой, если я ошибаюсь. Мы должны искать подходящий размер для наших проблем. Если скрытое пространство очень мало, модель достигнет точки, в которой она больше не сможет производить лучшего качества (узкое место), и если она будет слишком большой, модели потребуется очень много времени, чтобы получить хорошие результаты, и она может даже не сойтись. Обычно один начинается с размера скрытого пространства, используемого другими для той же проблемы.

0 голосов
/ 06 марта 2020

Случайный шум - это характерный вектор, уникальный для каждого изображения

Давайте рассмотрим вектор шума 128

А сейчас просто сосредоточимся на 1-й записи из вектора, давайте рассмотрим его для длины волос на голова

Из тренировочных изображений модель узнала, что для лысого это значение = 0, а для длинных волос = 1, выбор случайного числа от 0 до 1 определяет количество волос. поэтому модель может генерировать людей разной длины волос

Таким образом, все 128 записей в случайном шуме будут определять один фактор человеческого лица

. Поэтому каждый раз при выборе случайного шума будет создаваться изображение нового человека

Если вы используете случайный шум одинаково каждый раз, тогда модель будет генерировать одно и то же изображение

Надеюсь, вы поняли, как работает GAN.

...