首页 > 解决方案 > 多头的自定义损失 - 图像定位和分类

问题描述

我正在使用以下 NN 来解决定位和分类问题

def model():
    inputs = tf.keras.Input(shape=(100, 100, 1))
    x = tf.keras.layers.Conv2D(32, (3,3), activation='relu')(inputs)
    x = tf.keras.layers.AveragePooling2D()(x)
    x = tf.keras.layers.Conv2D(64, (3,3), activation='relu')(x)
    x = tf.keras.layers.AveragePooling2D()(x)
    x = tf.keras.layers.Conv2D(128, (3,3), activation='relu')(x)
    x = tf.keras.layers.AveragePooling2D()(x)
    x = tf.keras.layers.Flatten()(x)

    # Classifier Head
    classifier_head = tf.keras.layers.Dense(64)(x)
    classifier_head = tf.keras.layers.Dropout(0.2)(classifier_head)
    classifier_head = tf.keras.layers.Dense(16)(classifier_head)
    classifier_head = tf.keras.layers.Dropout(0.1)(classifier_head)
    classifier_head = tf.keras.layers.Dense(3, name='label')(classifier_head)

    # Regressor Head
    reg_head = tf.keras.layers.Dense(64)(x)
    reg_head = tf.keras.layers.Dropout(0.2)(reg_head)
    reg_head = tf.keras.layers.Dense(32)(reg_head)
    reg_head = tf.keras.layers.Dropout(0.1)(reg_head)
    reg_head = tf.keras.layers.Dense(4, name='bbox')(reg_head) #, activation='sigmoid'

    return tf.keras.Model(inputs=[inputs], outputs=[classifier_head, reg_head])

在我的情况下,有 3 个类:[Cat,Dog,None] 我想为 BBOX 构建一个自定义损失,如果类为 None,它将返回 0,换句话说 - 我如何将标签预测传递给损失bbox的计算

 losses = {'label': tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
          'bbox': custom_loss2
          }

标签: pythontensorflowkeras

解决方案


推荐阅读