В настоящее время я знакомлюсь с TensorFlow и машинным обучением.Я делаю некоторые уроки по передаче стиля, и теперь у меня есть часть примера кода, которую я почему-то не могу понять.
Мне кажется, я понял основную идею: есть три изображения, изображение контента, стильизображение и смешанное изображение.Давайте сначала поговорим о потере контента, потому что, если я смогу это понять, я также пойму потерю стиля.Таким образом, у меня есть изображение контента и смешанное изображение (начиная с некоторого распределения с некоторым шумом) и модель VGG16.
Насколько я понимаю, теперь я должен передать изображение контента в сеть некоторымслой, и посмотреть, что является выходной (карту объектов) этого слоя для ввода изображения контента.
После этого я также должен подать сеть со смешанным изображением на тот же слой, что и раньше, и посмотреть, чтовывод (карта объектов) этого слоя для ввода смешанного изображения.
Затем я должен рассчитать функцию потерь на основе этих двух выходных данных, потому что я хотел бы, чтобы смешанное изображение имело карту объектов, аналогичную изображению содержимого.
Моя проблема в том, что я не понимаю, как это делается в примерах кодов, которые я могу найти в Интернете.
Пример кода может быть следующим: http://gcucurull.github.io/tensorflow/style-transfer/2016/08/18/neural-art-tf/
Но почти во всех примерах использовался один и тот же подход.
Потеря контента определяется так:
def content_loss(cont_out, target_out, layer, content_weight):
# content loss is just the mean square error between the outputs of a given layer
# in the content image and the target image
cont_loss = tf.reduce_sum(tf.square(tf.sub(target_out[layer], cont_out)))
# multiply the loss by its weight
cont_loss = tf.mul(cont_loss, content_weight, name="cont_loss")
return cont_loss
И называется так:
# compute loss
cont_cost = losses.content_loss(content_out, model, C_LAYER, content_weight)
Где content_out - это выход для изображения контента, модель - используемая модель, C_LAYER - ссылка на слой, для которого мы хотим получить выходные данные, а content_weight - это вес, с которым мы умножаемся.
Проблема в том, что я как-то не вижу, куда это питает сеть со смешанным изображением.Мне кажется, что в "cont_loss" вычисляется среднеквадратичное значение между выходом для изображения содержимого и между самим слоем.
Магия должна быть где-то здесь:
cont_loss = tf.reduce_sum(tf.square(tf.sub(target_out[layer], cont_out)))
Но я просто не могу найти, как это приводит к RMS между картой объектов изображения содержимого и картой объектов смешанного изображения на данном слое.
Я был бы очень благодарен, если бы кто-то мог указать, где яЯ ошибаюсь и объясню мне, как рассчитывается потеря контента.
Спасибо!