我想创建一个自定义损失,该损失从数据生成器获取网络输出和多个参数。
我发现了this文章,该文章描述了如何使用一个标签从多层计算一个损失。但是我想使用fit_generator从具有多个标签的单层计算损耗。我的问题是Keras期望输出和标签的形状相同。
示例:
常规海关损失:
def custom_loss(y_pred, y_label):
return K.mean(y_pred - y_label)
我要使用的自定义损失类型的示例:
def custom_loss(y_pred, y_label, y_weights):
loss = K.mean(y_pred - y_label)
return tf.compat.v1.losses.compute_weighted_loss(loss, y_weights)
这只是一个示例,我的原始代码稍微复杂一点。我只想能够为损失函数提供两个参数(y_label和y_weights),而不是仅一个参数(y_label)。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
我不确定您到底要问什么,但也许您可以使用。您可以尝试使用类似自定义函数的函数,该函数返回损失函数。
def custom_loss(y_weights):
# Create a loss function that calculates what you want
def example_loss(y_true,y_pred):
loss = K.mean(y_pred - y_label)
return tf.compat.v1.losses.compute_weighted_loss(loss, y_weights)
# Return a function
return example_loss
# Compile the model
model.compile(optimizer='adam',
loss=custom_loss(y_weights), # Call the loss function with the preferred weights
metrics=['accuracy'])
您还可以查看this问题