是否可以通过常量将内置keras损失函数象征性地相乘?例如,如果我想要两个输出的损失的线性组合。
我可以写一个自定义丢失函数,但它不会被编译,因为它的python代码,而不是符号Keras?我正在寻找一种在纯Keras(或TF)中实现它的方法
答案 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
中指定。
或者,如果输出图层已命名,您还可以使用输出图层名称作为关键字指定loss
和loss_weights
。这可能有助于消除将哪些损失和权重分配给哪些输出的模糊性。
有关详细信息,请参阅https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models。