小编Dje*_*iss的帖子

在张量流上创建 BLEU 损失方法给出“未提供梯度”

我需要构建一个基于 BLEU 的自定义损失方法。我在构造函数中传递 LabelEncoder 以反转标签和预测并计算蓝色距离。

这是我的损失课

class CIMCodeSuccessiveLoss(Loss):

    def __init__(self, labelEncoder: LabelEncoder):
        super().__init__()
        self.le = labelEncoder

    def bleu_score(self, true_label, pred_label):
        cim_true_label = self.le.inverse_transform(true_label.numpy())
        cim_pred_label = self.le.inverse_transform(pred_label.numpy())
        bleu_scores = [sentence_bleu(list(one_true_label),
                                     list(one_pred_label),
                                     weights=(0.5, 0.25, 0.125, 0.125)) for one_true_label, one_pred_label in
                       zip(cim_true_label, cim_pred_label)]
        return np.float32(bleu_scores)

    def call(self, y_true, y_pred):
        labeled_y_pred = tf.cast(tf.argmax(y_pred, axis=-1), tf.int32)
        bleu = tf.py_function(self.bleu_score, (tf.reshape(y_true, [-1]), labeled_y_pred), tf.float32)
        return tf.reduce_sum(tf.square(1 - bleu))
Run Code Online (Sandbox Code Playgroud)

bleu_score 方法正在计算正确的分数并返回 NumPy 数组。当我尝试返回平方和时,出现此错误

raise ValueError(f"No gradients provided for any variable: {variable}.
Run Code Online (Sandbox Code Playgroud)

我还提供了模型:

inputs = tf.keras.Input(shape=(1,), dtype=tf.string)
x …
Run Code Online (Sandbox Code Playgroud)

python deep-learning tensorflow

9
推荐指数
1
解决办法
657
查看次数

标签 统计

deep-learning ×1

python ×1

tensorflow ×1