【问题标题】:Update sample weights in a Keras callback?在 Keras 回调中更新样本权重?
【发布时间】:2021-08-29 05:02:00
【问题描述】:

我正在尝试编写一个自定义回调,该回调将在 epoch 结束时更新样本权重。我用原始权重初始化自定义回调,但我不确定如何确保 keras 使用回调中定义的新样本权重来拟合模型。这是我的代码的一个简单示例(* 2 是一个示例,实际上不应该做任何事情)。

class update_weights(tf.keras.callbacks.Callback):
    def __init__(self, sample_weight):
        self.sample_weight = sample_weight

    def on_epoch_end(self, epoch, logs={}):
        self.sample_weight = self.sample_weight * 2

似乎可以从简单的 self.model 访问模型参数。但是我很难访问 fit 函数的参数。甚至可能吗?我可以在校准模型时修改拟合函数的参数吗?

【问题讨论】:

    标签: python tensorflow keras weighted


    【解决方案1】:

    现在我明白了你想要完成什么,这是一个有趣的问题。 我想知道样本权重是否真的在 model.fit 中发生变化(我怀疑是这样)你可以在 on_epoch_end 中选择一个时期,然后将那个时期的 sample_weight 设置为全零。据推测,如果实际上这会在您运行下一个 epoch 时改变 model.fit 中的值,那么由此产生的损失应该会有很大的不同。尝试类似

     def on_epoch_end(self, epoch, logs={}):
            is epoch==3:
                self.sample_weight = self.sample_weight * 0
    

    如果样本权重真正发生变化,则在第 4 阶段,我预计损失为零。让我知道会发生什么。

    【讨论】:

    • 测试的好主意,不幸的是它表明它不起作用。
    • 当您说不起作用时,您的意思是 model.fit 中的样本重量没有改变吗?也就是说,对损失没有显着影响?
    • 拟合正常,损失逐渐减小,3-4 epoch 前后没有明显变化。
    • 这正是我所期望的。一旦 model.fit 开始运行,它只使用初始样本权重。我不知道有什么方法可以访问它来改变它的价值。让我看看。
    • 从我读到的最直接的方法是从头开始构建训练循环。
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2020-01-15
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多