0

我需要将其他信息合并到取决于当前批次的 Keras 损失函数中。由于 Keras 损失只接受两个参数,因此我考虑通过在生成器对象上调用损失函数 next() 来添加此信息。但是,生成器只被调用一次(可能是在 model.compile() 中添加损失函数时)。这是一个示例代码:

data_batches = yield_data_batches()
meta_batches = yield_meta_batches()
....
model.compile(loss=loss_function, ...)
model.fit_generator(generator=data_batches, ....)

def loss_function(x, y):
      meta_x, meta_y = next(meta_batches)
      x *= meta_x  # component-wise matrix multiplication
      y *= meta_y  # component-wise matrix multiplication
      return mse(x, y)

有没有办法让损失函数在每次对 data_batch 进行评估时获得一个新的 meta_batch?还是有另一种方法可以将此元信息合并到损失函数中?

澄清: meta_x 和 meta_y 是二进制矩阵,应该从预测中消除某些元素,因为它们不应该计入损失。例如:

y_true = (a,b,c,0) y_pred = (d,e,f,g) y_meta = (1,1,1,0)

现在, y_pred*y_meta 应该抵消 g 以便它不计入损失。

4

1 回答 1

0

这不起作用,因为损失函数将被编译并添加到计算图中。您的损失函数可能仅取决于y_predy_true

您可以将此信息合并到 中y_true,也可以使用样本权重对由此产生的损失进行加权。

您的方法等效于两者的组合:假设权重 a 和 b(您称它们为 meta_x 和 meta_y):|ax-by| = a|xb/a*y|,因此您只需将 y_pred 加权 b/a 并添加样本权重 a。

于 2017-11-29T15:23:08.027 回答