【问题标题】:Tensorflow, possible to downweigh gradients for certain data itemsTensorflow,可以降低某些数据项的梯度
【发布时间】:2021-09-28 22:17:12
【问题描述】:

假设我有一个输出为 y_0 和 y_1 的多输出模型。 对于某些数据示例,我确信 y_0 是正确的,但知道 y_1 可能是一个完整的猜测。我的想法是使用自定义训练循环并乘以计算出的权重,但这似乎不起作用。有没有办法通过 keras api 做到这一点,可能比这更简单?

            @tf.function
            def train_on_batch(x,y):

                y_true = y[:, 0]
                weights = y[:,1]

                with tf.GradientTape() as tape:
                    y_pred = model(x, training=True)
                    print("ytrainpred ", y_pred)
                    loss_value_pre = loss(y_true, y_pred)   
                    loss_value = loss_value_pre * weights

                # compute gradient 
                grads = tape.gradient(loss_value, model.trainable_weights)

                # update weights
                optimizer.apply_gradients(zip(grads, model.trainable_weights))

                # update metrics
                loss_1_train.update_state(y_true[:, 0], loss_value[:,0])
                loss_2_train.update_state(y_true[:, 1], loss_value[:,1)

                return loss_value

【问题讨论】:

    标签: tensorflow keras gradient


    【解决方案1】:

    在 keras 对象的方法compile 中,您有一个称为损失权重的参数来执行此操作,您只需要实现获取一个或其他输出并作为损失数组传递给损失参数的损失函数,但是如果你有很多 ys,这将变得非常不切实际

    【讨论】:

    • 我看到的问题是,虽然您可以为某些输出变量设置权重,但您不能为单个数据项这样做。
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多