python - 多头的自定义损失 - 图像定位和分类
问题描述
我正在使用以下 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
}
- 我想保持可分离的损失,以便可以选择监控它们
解决方案
推荐阅读
- spring - 线程“主”java.lang.NoSuchMethodError 中的异常:org.springframework.core.ResolvableType
- javascript - 如何在javascript中更改输入元素占位符的颜色?
- c++ - 何时需要转换运算符 c++?
- python - 比较变量到多个字符串python3
- php - 如何限制来自 PHP 应用程序的外部 API 调用
- swift - Swift:Mac OSX:如何使用我的应用程序在 firebase 服务器中进行身份验证以写入/读取
- reactjs - reactjs条件渲染在第二次点击后工作
- wordpress - Wordpress 元查询
- java - Android Studio - 根据来自另一个活动的用户输入更新活动 TextView
- reactjs - 用 Jest 和 Enzyme 测试函数?