Python 如何在tensorflow中组合多个输出以创建度量?

Python 如何在tensorflow中组合多个输出以创建度量?,python,tensorflow,keras,Python,Tensorflow,Keras,我正在研究一个多任务神经网络,它有两个输出,一个分割“掩码”和一个分类“标签”: 从这个模型中,我得到一个预测“掩码”和一个预测“标签”。问题是:我想创建一个度量,当相应的“标签”>0.5时,它只计算“掩码”的骰子系数 我在tensorflow官方网站上搜索了很长一段时间,我只能找到如何计算每个输出的指标,但没有关于如何访问所有预测并将其组合的文档 metrics = {'mask': [dice_coef(threshold=0.5)], 'label': [tf.keras.

我正在研究一个多任务神经网络,它有两个输出,一个分割“掩码”和一个分类“标签”:

从这个模型中,我得到一个预测“掩码”和一个预测“标签”。问题是:我想创建一个度量,当相应的“标签”>0.5时,它只计算“掩码”的骰子系数

我在tensorflow官方网站上搜索了很长一段时间,我只能找到如何计算每个输出的指标,但没有关于如何访问所有预测并将其组合的文档

metrics = {'mask': [dice_coef(threshold=0.5)],
        'label': [tf.keras.metrics.binary_accuracy]}
这里每个度量只接受两个参数(y_true,y_pred)

更新:

我已经找到了一个解决办法,我没有将结果合并到指标中,而是在网络中添加了一个lambda层,并添加了一个输出

inputs = tf.keras.Input(shape=(352, 512, 3), name='image')
outputs = base_model(inputs)

mask = tf.keras.layers.Conv2D(4, (3,3), strides=1, padding='same', activation='sigmoid', name='mask')(outputs)

label = tf.keras.layers.GlobalAveragePooling2D()(outputs)
label = tf.keras.layers.Dense(4, activation='sigmoid', name='label')(label)

label_exp = tf.keras.layers.Lambda(lambda label: tf.cast(tf.math.greater(label, 0.5), tf.float32))(label)
label_exp = tf.keras.layers.Reshape([1,1,4])(label_exp)
filtered = tf.keras.layers.Multiply(name='filtered')([mask, label_exp])

model = tf.keras.models.Model(inputs, [mask, filtered, label])
现在,指标设置为:

metrics = {'mask': [dice_coef(threshold=0.5)],
            'filtered': [dice_coef(threshold=0.5)],
            'label': [tf.keras.metrics.binary_accuracy]}
这是可行的,但似乎需要额外的内存。仍然在寻找一个简洁的解决方案

metrics = {'mask': [dice_coef(threshold=0.5)],
            'filtered': [dice_coef(threshold=0.5)],
            'label': [tf.keras.metrics.binary_accuracy]}