tensorflow - YOLO 的损失函数
问题描述
我可以将这个损失函数用于 YOLO
def myLoss(y_actual,y_pred):
a = tf.keras.losses.BinaryCrossentropy()(y_actual[:,:,:,0],y_pred[:,:,:,0])
b = tf.keras.losses.MeanSquaredError()(y_actual[:,:,:,1:], y_pred[:,:,:,1:]*y_actual[:,:,:,:1])
loss= a + b
return loss
其中y_actual = [Pc,bx,by,bw,bh,c1,c2,c3]
pc = c1,c2,c3 之一存在于特定网格中的概率,
bx,by,bw,bh 是 a 的边界框参数特定的网格,
c1,c2,c3 是我要预测的 3 个类,例如:3 类的 0,0,1
我在某处读到,当 Pc_actual=0 时,损失不关心边界框和类预测,因此我将它们与 Pc_actual 相乘,这样当 pc_actual 为 0 时,对应于这些项的损失为 0。
如果我错了请纠正我
解决方案
当Pc_actual=0
损失不关心边界框和类预测时,你是对的,但它关心结果,Pc_pred
因为你需要模型来学习它,所以当Pc_actual=0
损失函数应该在(Pc_actual - Pc_pred)**2
预测模型时惩罚模型时是一个对象,而没有对象。
推荐阅读
- java - GoogleJsonResponseException: 403 Forbidden with enough authentication scopes
- java - 为什么 ActionPerformed 会执行多次?
- javascript - 编译 ejs i18next 时出现意外的令牌
- c# - 如何增加 RemoteWebDriver 的 HTTP 请求超时
- python - 如何创建一个仅在满足某些条件时才发生实例化的类?
- javascript - 如何在 Bootstrap 的页面刷新时保持当前 Accordion 处于活动状态
- php - 无法从连接表中检索数据
- java - 值 1 和值 2 的偶数
- c++ - 标准库是否提供类型列表?
- javascript - 反应路由器记忆路由向导