0

我正在创建一个使用自定义损失和自定义指标函数编译的 tf.keras.model。我使用 x=input_batch 和 y=someFunction(targets) 在模型上调用 train_on_batch

自定义损失和自定义指标函数的签名看起来像 methodname(y_true,y_pred) 这里 y_true 是由 someFunction(targets) 提供的

有没有办法在自定义指标函数和自定义损失函数中获取目标,而不是在 train_on_batch 中传递的修改后的目标

4

1 回答 1

0

将您的目标转换功能推入自定义损失中是一种选择吗?否则,您的训练循环可能永远无法访问转换前的标签。

def scale_label(y):
  return y * 0.1

def build_loss_fn(label_transform):
    def my_loss_fn(y_true, y_pred):
        new_y_pred = label_transform(y_pred)
        squared_difference = tf.square(y_true - new_y_pred)
        return tf.reduce_mean(squared_difference, axis=-1)  # Note the `axis=-1`
    return my_loss_fn

my_transformed_loss_fn = build_loss_fn(scale_label)

model.compile(optimizer='adam', loss=my_transform_loss_fn)

# Fit with raw labels now, train_on_batch sees raw labels

于 2021-10-21T14:02:31.927 回答