Python 如何从自定义Tensorflow损耗函数中处理神经网络的单个输出?

Python 如何从自定义Tensorflow损耗函数中处理神经网络的单个输出?,python,tensorflow,keras,neural-network,loss-function,Python,Tensorflow,Keras,Neural Network,Loss Function,我想实现一个定制的损失函数(特别是)来训练Tensorflow中的NN,其中NN有两个输出,损失函数是一个包含输出和预期输出的公式。我如何单独处理这些问题?例如,它看起来像: 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(

我想实现一个定制的损失函数(特别是)来训练Tensorflow中的NN,其中NN有两个输出,损失函数是一个包含输出和预期输出的公式。我如何单独处理这些问题?例如,它看起来像:

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_pred和y_true形状的文档,但以下方法似乎有效:要访问单个输出(假设输出是一维的),可以在张量的最后一个轴上切片:例如,
y_pred[…,0:1]
是第一个输出,
y_pred[…,1::2]
是每个奇数输出,
y_true[…,0::2]
每个偶数标签等等。

计算损失,包括两个输出,作为张量,然后使用
模型将其添加到模型中。添加损失(…)
。您在
compile
方法中指定的
loss
参数分别应用于每个输出,因此在您的情况下没有任何用处。@今天谢谢您!你能给我举个例子吗?我现在还是Tensorflow的新手。:-)这可能有助于了解情况。正如您所看到的,
compile
方法中没有指定
loss
参数。显然,这取决于模型的体系结构,因此您可能需要根据需要对其进行调整。