如何通过自定义的Tensorflow损失函数处理神经网络的各个输出?

时间:2019-05-19 14:50:16

标签: python tensorflow keras neural-network loss-function

我想实现一个自定义损失函数(特别是for this),用于在Tensorflow中训练NN,其中NN具有两个输出,并且损失函数是一个既包含输出又包含预期输出的公式。我该如何单独解决这些问题? Examples from tensorflow看起来像喜欢:

def mean_absolute_percentage_error(y_true, y_pred):
  y_pred = ops.convert_to_tensor(y_pred)
  y_true = math_ops.cast(y_true, y_pred.dtype)
  diff = math_ops.abs(
      (y_true - y_pred) / K.clip(math_ops.abs(y_true), K.epsilon(), None))
  return 100. * K.mean(diff, axis=-1)

张量在这里以y_true的形式传递到底是什么-它们具有什么形状?我还没有找到任何有关的文档。我看到的所有因自定义损失而产生的示例仅一次计算所有输出,而我需要挑选单个输出。

请注意:我无法将网络定义为两个输出,也不能为每个输出定义单独的损耗,因为Model.compile文档允许/像is done here一样,因为损耗函数是所有函数三个值。

1 个答案:

答案 0 :(得分:0)

我没有找到有关参数y_pred和y_true形状的文档,但是以下内容似乎可行:访问单个输出(假设输出是一维的),您可以在张量的最后一个轴上切片:例如y_pred[..., 0:1]是第一个输出,y_pred[..., 1::2]是每个奇数输出,y_true[..., 0::2]是每个偶数标签,依此类推。