Keras 在自定义损失函数中访问单个值

Posted

技术标签:

【中文标题】Keras 在自定义损失函数中访问单个值【英文标题】:Keras access individual values in custom loss function 【发布时间】:2019-01-15 19:15:48 【问题描述】:

我想实现如下损失函数:

接收一批维度(batch_size, number_out_nodes) 对每一行/样本应用一个 scipy 函数,将其映射到一个实数 合并批次中所有样本的结果

我已经使用 numpy 数组作为输入编写了函数。

看起来像这样:

 def loss_func(y_true, y_pred):
      y_pred = np.array(y_pred)
      list_of_factors = [4]*len(y_pred)
      val = 0
      for idx, factor in list_of_factors:
          val += factor*scipy_func(y_pred[idx])
      return val

有没有办法将此函数实现为 Keras 损失函数?我不知道如何访问该批次的各个样本。

谢谢

【问题讨论】:

【参考方案1】:

不能应用任何 scipy 函数,因为您在损失函数中获得的变量是 张量,而不是 nD NumPy 数组。所以损失函数中没有 NumPy 或 SciPy 以张量为参数。

根据您的 scipy 函数 是什么,您也许可以使用 Keras backend 中提供的操作来实现它。大多数函数类似于 NumPy 操作,但作用于张量。

看看existing loss functions 以及他们如何使用这些后端函数对张量进行操作。

【讨论】:

谢谢。但是我可以像在列表/数组中那样循环批处理中的不同样本(即使它们是张量)? 是的,您可以,但通常最好只执行向量操作,而不是使用任何 for 循环。

以上是关于Keras 在自定义损失函数中访问单个值的主要内容,如果未能解决你的问题,请参考以下文章

GPU 上的 Keras 模型:在自定义损失函数中使用 Pandas

如何在自定义损失函数中迭代张量?

Keras 中具有样本权重的自定义损失函数

Keras 中的 .fit() 方法触发损失函数多少次

图像分割 - Keras 中的自定义损失函数

如何在生成器提供的 Keras 自定义损失函数中访问样本权重?