Есть ли способ получить доступ к входам при создании пользовательских потерь? - PullRequest
0 голосов
/ 22 октября 2019

У меня довольно сложная сеть CNN, где у меня есть 3 разных входа и 6 выходов . Мне нужно создать функцию потерь, где один из входных данных влияет на вычисление потерь.

Я пытался пройти учебник по пользовательской функции потерь , но когда я использую вход модели в качестве параметра и используюэто в вычислениях я получаю:

NotImplementedError: Невозможно преобразовать символьный тензор (add_5: 0) в массив Numpy.

После отладки я понял, что упомянутый вводникогда не получает фактические значения, он остается тензором формы (None, None, None), в то время как Ожидаемые_y и прогнозируемые_y получают реальные формы данных (10, 46, 46, 19).

Код пользовательской функции потерь ( model param - модель, используемая в fit_generator):

def custom_loss(model):
    def loss(y, gt):
        # W is the background weight
        W = model.inputs[-1][:, :, :, -1]
        print(y.shape)
        print(W.shape)
        return K.sum(K.square(y - gt) * W) / c.BATCH_SIZE / 2

    return loss

Могу ли я получить доступ к данным, проходящим через модель, а не только к заполнителю?

1 Ответ

0 голосов
/ 23 октября 2019

Я решил эту проблему, добавив идентичный слой (который мне нужен) ко всем выходам, затем пользовательская потеря берет информацию из этого слоя и применяет ее к расчетам по умолчанию пользовательского MSE, как описано в вопросе.

Тем не менееВопрос о том, как получить доступ к сетевым входам в случае потери, остается без ответа, и меня интересует любое возможное понимание.

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