小编AME*_*AME的帖子

Keras 为 YOLO 定制损失函数

我正在尝试在 Keras 中定义自定义损失函数

def yolo_loss(y_true, y_pred):
Run Code Online (Sandbox Code Playgroud)

这里 y_true 和 y_pred 的形状是 [batch_size,19,19,5]。

对于批次中的每个图像,我想将损失计算为:

loss =   
square(y_true[:,:,0] - y_pred[:,:,0])  
+ square(y_true[:,:,1] - y_pred[:,:,1])   
+ square(y_true[:,:,2] - y_pred[:,:,2])   
+ (sqrt(y_true[:,:,3]) - sqrt(y_pred[:,:,3]))  
+ (sqrt(y_true[:,:,4]) - sqrt(y_pred[:,:,4]))
Run Code Online (Sandbox Code Playgroud)

我想到了几种方法来做到这一点,

1)使用for循环:

def yolo_loss(y_true, y_pred):
    y_ret = tf.zeros([1,y_true.shape[0]])
    for i in range(0,int(y_true.shape[0])):
        op1 = y_true[i,:,:,:]
        op2 = y_pred[i,:,:,:]
        class_error = tf.reduce_sum(tf.multiply((op1[:,:,0]-op2[:,:,0]),(op1[:,:,0]-op2[:,:,0])))
        row_error = tf.reduce_sum(tf.multiply((op1[:,:,1]-op2[:,:,1]),(op1[:,:,1]-op2[:,:,1])))
        col_error = tf.reduce_sum(tf.multiply((op1[:,:,2]-op2[:,:,2]),(op1[:,:,2]-op2[:,:,2])))
        h_error = tf.reduce_sum(tf.abs(tf.sqrt(op1[:,:,3])-tf.sqrt(op2[:,:,3])))
        w_error = tf.reduce_sum(tf.abs(tf.sqrt(op1[:,:,4])-tf.sqrt(op2[:,:,4])))
        total_error = class_error + row_error + col_error + h_error + w_error …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow

5
推荐指数
1
解决办法
4545
查看次数

标签 统计

keras ×1

python ×1

tensorflow ×1