Я получаю эту ошибку, когда пытаюсь использовать метод - "dice_coef_loss_border" для моей компиляции модели ML. если я использую обычный dice_coef_loss, ошибки нет! Так что я озадачен .. проблема, кажется, именно в функции K.pool2D, потому что, если я удаляю это, я не получаю ошибки! Любая информация будет полезна !!
I get this error when I try to use method - "dice_coef_loss_border" for my ML model compilation. if i use normal dice_coef_loss, no error! So i am puzzled.. the problem seems to be in specifically K.pool2D function, because if i remove this I get no error! Any info would be helpful!!
def dice_coef_loss_border(y_true, y_pred):
return (1 - dice_coef_border(y_true, y_pred)) * 0.05 + 0.95 * dice_coef_loss(y_true, y_pred)
def dice_coef_border(y_true, y_pred):
border = get_border_mask((21, 21), y_true)
border = K.flatten(border)
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
y_true_f = K.tf.gather(y_true_f, K.tf.where(border > 0.5))
y_pred_f = K.tf.gather(y_pred_f, K.tf.where(border > 0.5))
return dice_coef(y_true_f, y_pred_f)
def get_border_mask(pool_size, y_true):
negative = 1 - y_true
positive = y_true
positive = K.pool2d(positive, pool_size=pool_size, padding="same")
negative = K.pool2d(negative, pool_size=pool_size, padding="same")
border = positive * negative
return border
def dice_coef_loss(y_true, y_pred):
return 1 - dice_coef(y_true, y_pred)
def dice_coef(y_true, y_pred, smooth=1.0):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)