【发布时间】:2019-04-10 03:09:16
【问题描述】:
我是 keras 和 tensorflow 的新手。如何在进行对象检测时实现自定义损失函数,现在我有 5 个参数 - 4 个用于边界框坐标,1 个用于对象是否存在。 如果对象存在,损失函数应该返回坐标差的平方,否则如果对象不存在,它应该返回一个巨大的损失值。这是我现在正在尝试的代码:
def loss_func(y_true,y_pred):
mask = np.array([False, False, False,False,True]) # check column of the class of object
mask1 = np.array([True, True, True,True,False]) # get the columns of the coordinates of B box
check_class = K.mean(K.square(tf.subtract(tf.boolean_mask(y_true,mask),tf.boolean_mask(y_pred,mask))))
mean_square = K.mean(K.square(tf.subtract(tf.boolean_mask(y_true,mask1),tf.boolean_mask(y_pred,mask1))))
value=K.mean(tf.boolean_mask(y_pred,mask))
return value*mean_square + check_class
这里我屏蔽了其他值以获得最后一个值,即 1000--> 对象存在 0 --> 对象不存在。 还有其他更好的方法吗?
当我在 Kaggle 中运行时,损失值迅速下降,到第二个时期损失变为 0。
【问题讨论】:
-
您是否使用大小为 1 的批次? (假设您使用大小为 5 的掩码)
-
No batch size 不是 1 ,我以为每张图片都会计算损失函数?事实上批量大小是 16
-
@Or Dinari 我将批量大小更改为 1 ,现在损失仅为 0 - 没有变化
标签: python tensorflow keras object-detection