在自回归连续问题中,当零值占据过多空间时,可以将这种情况视为零膨胀问题(即ZIB)。换句话说,我们不是试图拟合f(x)
,而是希望拟合g(x)*f(x)
,其中f(x)
是我们想要近似的函数,即y
,而g(x)
是一个根据值是否为零或非零输出0到1之间值的函数。
目前,我有两个模型。一个模型输出g(x)
,另一个模型拟合g(x)*f(x)
。
第一个模型为我提供了一组权重。这就是我需要你帮助的地方。我可以使用sample_weights
参数与model.fit()
一起使用。由于我处理的是大量数据,因此需要使用model.fit_generator()
。然而,fit_generator()
没有sample_weights
参数。
有没有办法在fit_generator()
中使用sample_weights
?否则,知道我已经为g(x)
训练了一个模型,我该如何拟合g(x)*f(x)
?
回答:
你可以将样本权重作为生成器返回的元组的第三个元素提供。根据Keras文档关于fit_generator
的说明:
generator: 一个生成器或
Sequence
(keras.utils.Sequence
)对象的实例,以避免在使用多处理时重复数据。生成器的输出必须是以下之一
- 一个元组
(inputs, targets)
- 一个元组
(inputs, targets, sample_weights)
。
更新: 这里是一个粗略的生成器草图,它返回输入样本和目标以及从模型g(x)
获得的样本权重:
def gen(args): while True: for i in range(num_batches): # 获取第i批数据 inputs = ... targets = ... # 获取样本权重 weights = g.predict(inputs) yield inputs, targets, weights model.fit_generator(gen(args), steps_per_epoch=num_batches, ...)