有没有办法在keras中重用计算图的已评估部分?

有没有办法在keras中重用计算图的已评估部分?,keras,loss-function,Keras,Loss Function,我使用keras,我想在loss function()中结合ssim和其他一些函数 为了查看每个组件的值和效果,我还将每个组件定义为度量。但这会导致计算每一个两次,一次在损失函数中,另一次在度量函数中 有没有办法计算每个分量一次,并将它们的值用作度量和损失函数? 谢谢尝试将您的网络定义为多输出模型,如: Model(inputs=your_input, outputs=[your_output, your_output, ...]) 然后,您可以为每个(相同)输出定义不同的损耗函数,如下所示:

我使用keras,我想在loss function()中结合ssim和其他一些函数

为了查看每个组件的值和效果,我还将每个组件定义为度量。但这会导致计算每一个两次,一次在损失函数中,另一次在度量函数中

有没有办法计算每个分量一次,并将它们的值用作度量和损失函数?
谢谢

尝试将您的网络定义为多输出模型,如:

Model(inputs=your_input, outputs=[your_output, your_output, ...])
然后,您可以为每个(相同)输出定义不同的损耗函数,如下所示:

model.compile(..., loss=[my_loss_1, my_loss_2, ...], loss_weights=[w1, w2, ...])
为了更好,可以使用“identity”lambda层定义单独的命名的输出层(并按名称设置损失)

这样,您的总体损失是几个损失函数的组合,您可以得到每个损失的值,而无需进行冗余计算

out_loss1 = Lambda(lambda x: x, name='loss1')(my_output)
out_loss2 = Lambda(lambda x: x, name='loss2')(my_output)
...
model.compile(..., loss={'loss1': my_loss_1, 'loss2': my_loss_2, ...}, loss_weights={'loss1':w1, 'loss2':w2, ...})