首页 > 解决方案 > 相对于模型输出的 TensorFlow 损失梯度给出 None

问题描述

我试图将我的损失函数与training_stepa 函数中的模型输出区分开来tf.keras.Model。这是我的尝试:

    def train_step(self, data):
        x, y = data
        with tf.GradientTape(persistent=True) as tape1:
            y_pred, dense_out = self(x, training=True)
            with tf.GradientTape() as tape2:
                tape2.watch(y_pred)
                loss = self.compiled_loss(y, y_pred)
        dy = tape2.gradient(loss, y_pred)

我将tape1用于以后需要的渐变。首先,dyNone,我该如何解决这个问题?其次,是否允许在我的模型的 - 方法中返回两个输出值,training=True而在 时只返回一个?即使我不这样做是吗?calltraining=FalsedyNone

编辑:如果我在train_step函数之外执行以下操作,它的结果确实不同于None

    with tf.GradientTape() as tape:
        y_pred, dense_out = model(x_train, training=True)
        loss = loss_fn(y_train, y_pred)
    print(tape.gradient(loss, y_pred)) 

标签: pythontensorflowgradienttape

解决方案


推荐阅读