Keras:基于 Faster-RCNN 预测生成目标值

解决方案


好的,我确实找到了解决方案,也许不是最好的解决方案。本质上只是创建了一个使用TensorFlow的GradientTape的新方法。本质上,获取预测、生成目标、计算损失然后更新梯度。


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 子类化有更好的方法来做到这一点,但这确实起到了作用。


原帖


我目前正在尝试创建一个模型,其中需要通过一个函数运行预测,该函数将它们与训练标签进行比较。然后此函数将返回目标值。如何训练我的模型,以便将预测输入到我的函数中并返回函数 pred。我正在使用 Tensorflow 2.1.0 和 Keras 2.2.4-tf


编辑:


该模型是修改后的 Faster-RCNN 模型。我正在尝试添加该函数,该函数接受预测(2xN 和 4xN 向量),将它们转换为边界框,将它们与地面实况边界框进行比较,然后返回每个建议的边界框值应该是什么, 为了正确地覆盖这个边界框。


小唯快跑啊
浏览 93回答 1
1回答

莫回无

好的,我确实找到了解决方案,也许不是最好的解决方案。本质上只是创建了一个使用 TensorFlow 的 GradientTape 的新方法。本质上,获取预测、生成目标、计算损失然后更新梯度。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 gradientstrainable_vars = self.model.trainable_variablesgradients = tape.gradient(loss, trainable_vars)# Update weightsself.model.optimizer.apply_gradients(zip(gradients, trainable_vars))我知道使用 Keras 子类化有更好的方法来做到这一点,但这确实起到了作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python