Я пытаюсь построить BiseNet, показанный на рисунке "https://github.com/Blaizzy/BiSeNet-Implementation".
Когда я хочу использовать GlobalAveragePooling2D () в Keras (tf-backend), чтобы завершить уточненный модуль на рисунке (b), я нахожу, что выходная форма GlobalAveragePooling2D () не подходит для следующей свертки.
Я проверил многие реализации кода BiSeNet в github, однако большинство из них использует взамен AveragePooling2D (size = (1,1)). Но AveragePooling2D (size = (1,1)) совершенно бессмысленный.
Таким образом, я определяю слой Lambada, чтобы делать то, что я хочу (выбранный код показан ниже). Слой Lambada работает, но выглядит очень некрасиво:
def samesize_globalAveragePooling2D(inputtensor):
# inputtensor shape:(?, 28,28,32)
x = GlobalAveragePooling2D()(inputtensor) # x shape:(?, 32)
divide = tf.divide(inputtensor, inputtensor) # divide shape:(?, 28,28,32)
x2 = x * divide # x2 shape:(?, 28,28,32)
global_pool = Lambda(function=samesize_globalAveragePooling2D)(conv_0)
Надеюсь получить предложение сделать эту Ламбаду более изящной.
Спасибо!