Как настроить функцию потерь в Keras, которая обрабатывает изображения произвольного размера? - PullRequest
0 голосов
/ 30 мая 2019

Я делаю сеть CNN, которая имеет N слоев conv и M слоев conv-transpose. Проходя эти N + M слоев CNN, цель состоит в том, чтобы преобразовать каждое изображение (height, width, 3 color channel) в (height, width, nClasses), сохраняя при этом произвольную высоту и ширину изображения.

Допустим, в наборе данных содержится 6000 изображений, каждое из которых имеет разную высоту и ширину, поэтому вывод y_pred подобен списку с произвольным размером для каждого изображения: [img1_out, img2_out, ... , img6000_out]. Все image_out имеют каналы "nClass", но каждый имеет свою собственную оригинальную / произвольную высоту и ширину, что означает, что форма y_pred похожа на (6000, None, None, nClasses), где None и None являются заполнителями для height и width, которые не имеют фиксированных значений.

Теперь я хочу вычислить потери L2 между этими y_pred и y_true, тогда как y_true - это данные Основной Истины с тем же измерением, что и y_pred: (6000, None, None, nClasses).

    def l2_loss(y_true, y_pred):
        loss = 0
        n = y_true.shape[0]    

        for j in range(n):     
            loss = loss + np.sum((y_true - y_pred[i, :, :, :])**2)

        return loss/num_joints

и я хотел бы перевести это на бэкэнд-функции Keras, но не уверен (1) возможно ли иметь произвольные размеры в тензорах? (2) как перевести for-loop в моду broadcast, как в бэкэнд-функциях Keras, когда форма не зафиксирована.

Спасибо за любые предложения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...