同时为不同的输出使用不同的损耗函数Keras?

时间:2018-03-31 03:01:39

标签: machine-learning neural-network computer-vision keras

我正在尝试建立一个分别输出深度图和语义分割数据的网络。

为了训练网络,我想对分割分支使用分类交叉熵,并为输出深度图的分支使用均方误差。

我找不到有关在Functional API的Keras文档中为每个分支实现两个损失函数的任何信息。

我是否有可能在训练期间同时使用这些损失功能,或者我可以更好地分别训练不同的分支?

1 个答案:

答案 0 :(得分:6)

来自Model.compile的{​​{3}}:

  

损失:字符串(目标函数的名称)或目标函数。看到   documentation。如果模型有多个输出,则可以使用不同的输出   通过字典或损失列表输出每个输出。该   然后,模型将最小化的损失值将是总和   所有个人损失。

如果您的输出已命名,则可以使用将名称映射到相应损失的字典:

x = Input((10,))
out1 = Dense(10, activation='softmax', name='segmentation')(x)
out2 = Dense(10, name='depth')(x)
model = Model(x, [out1, out2])
model.compile(loss={'segmentation': 'categorical_crossentropy', 'depth': 'mse'},
              optimizer='adam')

否则,使用损失列表(与相应的模型输出的顺序相同)。

x = Input((10,))
out1 = Dense(10, activation='softmax')(x)
out2 = Dense(10)(x)
model = Model(x, [out1, out2])
model.compile(loss=['categorical_crossentropy', 'mse'], optimizer='adam')