Keras: создание целевых значений на основе прогнозов Faster-RCNN - PullRequest
0 голосов
/ 07 мая 2020

РЕШЕНИЕ

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

with tf.GradientTape() as tape:
    # Forward pass
    y_preds = self.model(x, training=True)
    # Generate the target values from the predictions
    actual_deltas, actual_objectness = self.generate_target_values(y_preds, labels)
    #Get the loss
    loss = self.model.compiled_loss([actual_deltas, actual_objectness], y_preds, regularization_losses=self.model.losses)
# Compute gradients
trainable_vars = self.model.trainable_variables
gradients = tape.gradient(loss, trainable_vars)
# Update weights
self.model.optimizer.apply_gradients(zip(gradients, trainable_vars))

Я понимаю, что есть более эффективные способы сделать это с помощью подкласса Keras, но это сработало.

ORIGINAL POST

В настоящее время я пытаюсь создать модель, в которой прогноз необходимо выполнить с помощью функции, которая сравнивает их с меткой обучения. Затем эта функция вернет целевые значения. Как мне обучить мою модель, чтобы прогнозы передавались моей функции, и она возвращала функцию pred. Я использую Tensorflow 2.1.0 и Keras 2.2.4-tf

Изменить:

Модель представляет собой модифицированную модель Faster-RCNN. Я пытаюсь добавить функцию, которая принимает прогнозы (вектор 2xN и 4xN), преобразует их в ограничивающие прямоугольники, сравнивает их с ограничивающими прямоугольниками истинности земли, а затем возвращает то, какими должны были быть значения каждого из предложенных значений ограничивающих прямоугольников. , чтобы правильно наложить эту ограничивающую рамку.

1 Ответ

0 голосов
/ 09 июля 2020

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

with tf.GradientTape() as tape:
    # Forward pass
    y_preds = self.model(x, training=True)
    # Generate the target values from the predictions
    actual_deltas, actual_objectness = self.generate_target_values(y_preds, labels)
    #Get the loss
    loss = self.model.compiled_loss([actual_deltas, actual_objectness], y_preds, regularization_losses=self.model.losses)
# Compute gradients
trainable_vars = self.model.trainable_variables
gradients = tape.gradient(loss, trainable_vars)
# Update weights
self.model.optimizer.apply_gradients(zip(gradients, trainable_vars))

Я понимаю, что есть более эффективные способы сделать это с помощью подкласса Keras, но это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...