Keras中的自定义损失函数组合了多个输出

问题描述 投票:0回答:1

我进行了很多搜索,但仍然无法弄清楚编写一个具有多个输出的自定义损失函数,它们在它们之间相互作用。

我的神经网络定义为:

def NeuralNetwork():

    inLayer = Input((2,));
    layers = [Dense(numNeuronsPerLayer,activation = 'relu')(inLayer)];
    for i in range(10):
        hiddenLyr = Dense(5,activation = 'tanh',name = "layer"+ str(i+1))(layers[i]);
        layers.append(hiddenLyr);
    out_u = Dense(1,activation = 'linear',name = "out_u")(layers[i]);
    out_k = Dense(1,activation = 'linear',name = "out_k")(layers[i]);

    outLayer = Concatenate(axis=-1)([out_u,out_k]);

    model = Model(inputs = [inLayer], outputs = outLayer);

    return model

我现在正尝试如下定义自定义损失函数:

def computeLoss(true,prediction):

          u_pred = prediction[:,0];
          k_pred = prediction[:,1];
          loss = f(u_pred)*k_pred;
          return loss;

其中f(u_pred)是对u_pred的某种操纵。当我仅使用u_pred时(即仅来自神经网络的单个输出),代码似乎可以正常工作并产生正确的结果。但是,当我尝试为k_pred包括另一个输出并在损失函数中执行预测张量的切片时,我开始得到错误的结果。我觉得在Keras中处理多个输出时做错了事,但是不确定我的错误在哪里。欢迎对我的前进方式提供任何帮助。

keras loss-function
1个回答
0
投票

我发现您不能只使用索引(即[:,0]或[:,1])在tf中切片张量。该操作似乎无效。而是使用tensorflow中的内置函数作为在https://www.tensorflow.org/api_docs/python/tf/split?version=stable中详细说明>

所以起作用的语法是,

((u_pred,k_pred)= tf.split(预测,num_or_size_splits = 2,轴= 1);

© www.soinside.com 2019 - 2024. All rights reserved.