Создайте тензор Кераса с формой, аналогичной выходу модели для пользовательской функции потерь - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть модель keras с выходной формой последнего слоя, равной (None,574,6), которая None является моей подачей размера партии в модель.

У меня также есть двумерный массив numpy, называемый anchorsс формой (574,6).

Что мне нужно, так это вывод всех данных за вычетом этого элемента массива.

import keras.backend as K

anchor_tensor = K.cast(anchors, tf.float32)
print(K.int_shape(anchor_tensor))
#(576, 4)
print(K.int_shape(y_pred))
#(None, 574, 6)
y_pred - anchor_tensor

В приведенном выше коде произошла следующая ошибка, поскольку batch_size неизвестно.

InvalidArgumentError: Размеры должны быть равны, но 574 и 576 для 'sub_6' (op: 'Sub') с входными формами: [?, 574,6], [576,4].

Во время обработки вышеуказанного исключения произошло другое исключение:

Как я могу повторить anchor_tensor None раз, чтобы сделать его форму такой же, как y_pred?

1 Ответ

1 голос
/ 24 сентября 2019

Tensorflow легко сделает то, что он называет «трансляцией», которая автоматически повторяет отсутствующие элементы, если это возможно.Но чтобы это произошло, это должно подтвердить, что формы позволяют это сначала.

Самый безопасный способ убедиться, что формы совместимы, это сделать их одинаковой длины и иметь значение 1 в измерении, которое вы хотите повторить.

Итак, это так просто, как:

anchor_tensor = K.expand_dims(anchor_tensor, axis=0) #new shape is (1, 576, 4)   
result = y_pred - anchor tensor

Теперь Tensorflow может соответствовать формам и будет повторять тензор для всего размера пакета.

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