解决方案
好的,我确实找到了解决方案,也许不是最好的解决方案。本质上只是创建了一个使用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 向量),将它们转换为边界框,将它们与地面实况边界框进行比较,然后返回每个建议的边界框值应该是什么, 为了正确地覆盖这个边界框。
莫回无
相关分类