Найти тему
17 подписчиков

Генерация изображения из шума с помощью оптимизации


В классическом обучении нейронной сети мы фокусируемся на оптимизации параметров модели, чтобы минимизировать ошибку предсказаний на обучающих данных:

with tf.GradientTape() as tape:
predictions = model(input_data)
loss = loss_func(predictions, target_data)

grads = tape.gradient(loss, model.trainable_variables)
opt.apply_gradients(zip(grads, model.trainable_variables))

В случае генерации изображения из шума, процесс обучения и обновления параметров немного отличается от классического обучения нейронных сетей. Создадим шум из которого будем генерировать изображение:

image = tf.Variable(np.random.rand(*content_image.shape).astype(np.float32))

Создаем контекст в котором TensorFlow отслеживает все операции, связанные с тензорами, чтобы потом вычислить градиенты:

with tf.GradientTape() as tape:

В контексте вычисляем функцию потерь, которая измеряет, насколько хорошо сгенерированное изображение соответствует желаемому результату:

def loss(image):
return tf.keras.losses.MeanSquaredError()(content_image, image)

loss = loss_func(image)

Вычисляем градиент функции потерь по отношению к текущему изображению. Другими словами получаем вектор, который показывает, как нужно изменить каждый пиксель изображения, чтобы уменьшить значение функции потерь:

grad = tape.gradient(loss, image)

Шаг оптимизации, который должен каждый раз немного приближать картинку к той, которая минимизирует функционал ошибки:

opt.apply_gradients([(grad, image)])

Таким образом, вместо обновления весов нейронной сети, обновляем само изображение, которое играет роль "параметров" подлежажщих оптимизации.

#ML
Генерация изображения из шума с помощью оптимизации  В классическом обучении нейронной сети мы фокусируемся на оптимизации параметров модели, чтобы минимизировать ошибку предсказаний на обучающих...
1 минута