Python 如何更改切片tensorflow对象的值

Python 如何更改切片tensorflow对象的值,python,numpy,tensorflow,yolo,Python,Numpy,Tensorflow,Yolo,我想为我的tensorflow keras模型编写一个自定义损失函数,该模型将执行YOLO算法,问题是当特定网格中没有对象时,对象位置的导数应为0,因为它不关心它。 所以我试着用y_true乘以每个bbox,但是我不能切片张量对象并改变它的值 def YOLO_loss_function(y_true, y_pred): cost = np.subtract(np.multiply(-y_true, (K.log(y_

我想为我的tensorflow keras模型编写一个自定义损失函数,该模型将执行YOLO算法,问题是当特定网格中没有对象时,对象位置的导数应为0,因为它不关心它。 所以我试着用y_true乘以每个bbox,但是我不能切片张量对象并改变它的值

def YOLO_loss_function(y_true, y_pred):
    cost = np.subtract(np.multiply(-y_true, 
                                  (K.log(y_pred + tf.keras.backend.epsilon()))),
                np.multiply((1 - y_true),
                            (K.log(1 - y_pred + tf.keras.backend.epsilon()))))
    for b in range(num_bboxes):
        cost[:, :, bbox_size*b:bbox_size*(b + 1)] *= y_true[:, :, bbox_size*b:(bbox_size*b + 1)]

    return K.sum(cost, axis=-1)

return YOLO_loss_function
def YOLO_loss_function_shell(类路径、输出形状): 以开放式(类路径,“r”)作为拱门: classes=list(映射(lambda行:row.strip(“\n”).strip(“\r”), f_arch.readlines()) classes=list(筛选器(lambda行:行!=“”而非行。startswith(“#”)为类)) num_classes=len(类) bbox\u大小=(5+个类) num\u bboxes=int(输出\u形状[2]/bbox\u大小)

def YOLO_loss_function(y_true, y_pred):
    cost = np.subtract(np.multiply(-y_true, 
                                  (K.log(y_pred + tf.keras.backend.epsilon()))),
                np.multiply((1 - y_true),
                            (K.log(1 - y_pred + tf.keras.backend.epsilon()))))
    for b in range(num_bboxes):
        cost[:, :, bbox_size*b:bbox_size*(b + 1)] *= y_true[:, :, bbox_size*b:(bbox_size*b + 1)]

    return K.sum(cost, axis=-1)

return YOLO_loss_function
它一直在告诉我 TypeError:“Tensor”对象不支持项分配

def YOLO_loss_function(y_true, y_pred):
    cost = np.subtract(np.multiply(-y_true, 
                                  (K.log(y_pred + tf.keras.backend.epsilon()))),
                np.multiply((1 - y_true),
                            (K.log(1 - y_pred + tf.keras.backend.epsilon()))))
    for b in range(num_bboxes):
        cost[:, :, bbox_size*b:bbox_size*(b + 1)] *= y_true[:, :, bbox_size*b:(bbox_size*b + 1)]

    return K.sum(cost, axis=-1)

return YOLO_loss_function