【问题标题】:Keras: using weights when fittingKeras:在拟合时使用权重
【发布时间】:2019-07-25 04:35:55
【问题描述】:

我有一个关于在 keras 中使用权重的问题。我有一些数据作为事件,每个事件都有一个相关的权重。因此,当我对我的 keras 模型进行训练时,我使用 sample_weight 参数来传递该信息。

然后我注意到,如果我想使用 model.predict 方法,则没有传递权重的参数......现在我不确定我拥有的权重类型是否就是我的权重类型应该在 sample_weight 的 fit 方法中使用。

我的问题是,fit 方法应该接收什么类型的权重?另外,是否理解predict方法不需要数据的任何权重?

谢谢!

【问题讨论】:

  • 嗨@Sigma,我看到你在欧洲核子研究中心工作,所以我可以假设你在问一些蒙特卡罗生成的样本和相关的模拟权重吗?如果是这样,您是否为您的问题找到了确凿的答案?我处于类似的情况,我现在能做的就是过滤掉权重与平均值相差很大的事件......
  • 嗨@Demosthene,我确实在问,因为我想知道使用 sample_weight 参数将 MC 权重传递给训练是否正确。我相信使用这种方法在训练期间对每个事件进行加权是有意义的。尽管如此,我总是比较将 MC 权重作为 sample_weight 传递和不使用它们之间的结果;结果总是很相似,所以我不太担心。我不得不说,就我而言,我并没有真正的异常权重,所以我不需要以任何方式删除它们。

标签: python tensorflow keras


【解决方案1】:

当您对样本中的所有数据没有相同的置信度时,使用参数sample_weight。通过这种方式,您可以告诉 Keras,您对其中的一些比其他的更有信心。这仅用于训练,因为它用于调整(权重)优化器使用的损失函数。因此,在fit 中,您不应传递它,因为您对输出一无所知,也无法说出您的信心。

来自 Keras 的文档 (https://keras.io/models/model/#train_on_batch)

sample_weight: Optional Numpy array of weights for the training samples, used for weighting the loss function (during training only).

【讨论】:

    【解决方案2】:

    我认为在 model.fit 的上下文中“sample_weight”的含义可能有些混淆。当您调用 model.fit 时,您正在最小化损失函数。该损失函数测量模型预测与真实值之间的误差。数据集中的一些样本对你来说可能更重要,所以你会在这些样本上更重地权衡损失函数。因此,“sample_weights”仅用于在训练期间对数据集中的某些样本进行加权,以“更好地拟合”这些样本相对于其他样本。它们是 model.fit 的可选参数(默认情况下,每个样本的权重相等——如果你没有充分的理由不这样做,你应该怎么做)。而且(希望我的解释足够清楚)在 model.predict 的上下文中没有任何意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      相关资源
      最近更新 更多