gpt4 book ai didi

Keras实现需要内层输出作为标签的定制损失函数

转载 作者:行者123 更新时间:2023-12-02 10:21:40 25 4
gpt4 key购买 nike

在keras中,我想自定义我的损失函数,它不仅需要(y_true, y_pred)作为输入,还需要使用网络内部层的输出作为输出层的标签。这张图显示了Network Layout

这里,内部输出是xn,它是一个一维特征向量。右上角,输出为xn',即xn的预测。换句话说,xn 是 xn' 的标签。

虽然 [Ax, Ay] 传统上称为 y_true,而 [Ax',Ay'] 是 y_pred。

我想将这两个损失分量合并为一个并联合训练网络。

非常感谢任何想法或想法!

最佳答案

我已经找到了解决办法,以防有人正在寻找相同的方法,我发布在这里(基于本文中给出的网络):

这个想法是定义定制的损失函数并将其用作网络的输出。 (注解:A是变量A的真实标签,A'是变量A的预测值)

def customized_loss(args):
#A is from the training data
#S is the internal state
A, A', S, S' = args
#customize your own loss components
loss1 = K.mean(K.square(A - A'), axis=-1)
loss2 = K.mean(K.square(S - S'), axis=-1)
#adjust the weight between loss components
return 0.5 * loss1 + 0.5 * loss2

def model():
#define other inputs
A = Input(...) # define input A
#construct your model
cnn_model = Sequential()
...
# get true internal state
S = cnn_model(prev_layer_output0)
# get predicted internal state output
S' = Dense(...)(prev_layer_output1)
# get predicted A output
A' = Dense(...)(prev_layer_output2)
# customized loss function
loss_out = Lambda(customized_loss, output_shape=(1,), name='joint_loss')([A, A', S, S'])
model = Model(input=[...], output=[loss_out])
return model

def train():
m = model()
opt = 'adam'
model.compile(loss={'joint_loss': lambda y_true, y_pred:y_pred}, optimizer = opt)
# train the model
....

关于Keras实现需要内层输出作为标签的定制损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41670995/

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