通过常数乘以keras损失函数

时间:2017-12-15 01:13:14

标签: tensorflow keras

是否可以通过常量将内置keras损失函数象征性地相乘?例如,如果我想要两个输出的损失的线性组合。

我可以写一个自定义丢失函数,但它不会被编译,因为它的python代码,而不是符号Keras?我正在寻找一种在纯Keras(或TF)中实现它的方法

1 个答案:

答案 0 :(得分:3)

如果模型产生多个输出,则可以通过向模型的loss方法的compile参数提供Keras losses列表,为每个输出分配一个损失函数。例如,如果您的模型具有

形式
model = Model(inputs=[input_a, input_b], outputs=[output_a, output_b])

您可以这样编译:

model.compile(
    optimizer='rmsprop',
    loss=['binary_crossentropy', 'mean_squared_error'],
    loss_weights=[1., 0.2]
)

这会将二进制交叉熵丢失分配给输出output_a,将均方误差丢失分配给output_b。最终被最小化的损失将是这些损失的加权和,其中权重在loss_weights中指定。

或者,如果输出图层已命名,您还可以使用输出图层名称作为关键字指定lossloss_weights。这可能有助于消除将哪些损失和权重分配给哪些输出的模糊性。

有关详细信息,请参阅https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models