假设我有一个具有5个输出的神经网络:
[o1, o2, o3, o4, o5]
如何赋予o5
更高的权重?这样在计算成本函数时,o5
的效果会比其他输出更大。
例如,如果o1
的误差是0.1,而o5
的误差也是0.1,那么o5
的误差对成本函数的影响应该比o1
的误差更大。
特别是,我希望在TensorFlow/Keras中实现这一点。
另一个更详细的例子:
[o1, o2, o3, o4]
都是介于0和1之间的值,代表了几个平均房价的偏差。
o5
是一个介于0和1之间的值,代表了房屋卖家的紧急程度;他们是急于出售还是不急于出售。
o1
, o2
, o3
, o4
中的轻微不准确性不如o5
中的不准确性重要。
回答:
在model.compile()
中有一个可选参数loss_weights
。以下是来自文档的参数描述:
可选的列表或字典,用于指定标量系数(Python浮点数)来加权不同模型输出的损失贡献。模型将最小化的损失值将是所有个体损失的加权和,由
loss_weights
系数加权。如果是一个列表,预期与模型的输出有一对一的映射。如果是一个字典,预期将输出名称(字符串)映射到标量系数。
所以在你的情况下,你需要创建如下字典:
loss_weights={'o1':1.0, 'o2':1.0, 'o3':1.0, 'o4':1.0, 'o5':5.0}
在上面的字典中,o5
对损失函数的影响是其他输出的5倍。根据每个输出的重要性设置这些值。注意在model.compile
中设置loss_weights=loss_weights