gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:56:20 25 4
gpt4 key购买 nike

我进行了大量搜索,但仍然无法弄清楚如何编写具有多个交互输出的自定义损失函数。

我有一个神经网络定义为:

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 中处理多个输出时做错了什么,但我不确定我的错误在哪里。欢迎任何有关我如何进行的帮助。

最佳答案

我发现你不能只使用索引(即 [:,0] 或 [:,1])来切片 tf.该操作似乎不起作用。相反,使用 tensorflow 中的内置函数作为详见 https://www.tensorflow.org/api_docs/python/tf/split?version=stable

所以有效的代码是:

(u_pred, k_pred) = tf.split(prediction, num_or_size_splits=2, axis=1)

关于keras - Keras 中的自定义损失函数结合了多个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com