Типичное изображение GAN имеет вывод формы (w,h,3)
со значениями 0 ... 1, которые затем масштабируются до 0 ... 255 для представления цветного изображения.
Таким образом, в каждой позиции w, h мы получаем 3 значения, которые вместе представляют один цвет в пространстве RGB.
Я хочу как-то ограничить этот вывод, чтобы разрешить указывать только c цветов в качестве вывода. Например,
colours = [[200, 20, 20], [20, 200, 20], [20, 20, 200], ...]
number_of_allowed_colours = len(colours)
В идеале разрешенные цвета были бы частью ввода, но учитывая сложность задачи, я в порядке, начиная первые итерации сети с цветами как часть сетевой архитектуры.
До сих пор я безуспешно перепробовал много подходов. Я вижу, что это может быть достигнуто, когда последний слой сети будет иметь форму (w,h,number_of_allowed_colours)
, а затем применяется функция активации, чтобы отобразить это 3-е измерение в соответствующий цветовой триплет. Одна идея, которую я пытаюсь расширить, - это использовать что-то вроде tf.argmax
в сочетании с tf.contrib.lookup.HashTable
. Другой вариант, на который я обращаю внимание, это наличие слоя с обычной формой (w,h,3)
, но в процессе активации он округляется до ближайшего совпадения по цвету. Проблема здесь заключается в отсутствии градиента и в том, что не существует идеального алгоритма для сравнения цветов.
Отредактировано: функция потерь должна использовать сгенерированное выходное изображение, таким образом, решение должно быть полностью дифференцируемым. Выход сети должен быть (w,h,3)
образным изображением.