Получение invalidArgumentError: transpose ожидает вектор размером 3, но input (1) - вектор размера 4 - PullRequest
0 голосов
/ 30 октября 2019

Я получаю эту ошибку, когда пытаюсь использовать метод - "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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...