Реализация пропусков соединений в keras

Я реализую ApesNet в keras. У него есть ApesBlock, который пропускает соединения. Как добавить это в последовательную модель в keras? ApesBlock состоит из двух параллельных слоев, которые в конце сливаются путем поэлементного добавления.введите здесь описание изображения


person Siddhartha rao    schedule 22.02.2017    source источник


Ответы (2)


Простой ответ: не используйте для этого последовательную модель, вместо этого используйте функциональный API, тогда реализовать пропущенные соединения (также называемые остаточными соединениями) будет очень просто, как показано в этом примере из руководство по функциональному API:

from keras.layers import merge, Convolution2D, Input

# input tensor for a 3-channel 256x256 image
x = Input(shape=(3, 256, 256))
# 3x3 conv with 3 output channels (same as input channels)
y = Convolution2D(3, 3, 3, border_mode='same')(x)
# this returns x + y.
z = merge([x, y], mode='sum')
person Dr. Snoopy    schedule 22.02.2017
comment
Итак, не будет ли это проблемой во время обратного распространения, потому что у y есть веса свертки, а у z есть новый тензор? - person Siddhartha rao; 22.02.2017
comment
@Siddhartharao Нет, поскольку все это символично, градиенты могут быть вычислены непосредственно TF/Theano. - person Dr. Snoopy; 22.02.2017
comment
+1 почему они называются остаточными соединениями? И какая идея стоит за этим? Может ли кто-нибудь помочь улучшить мое понимание? - person mrk; 13.02.2019
comment
@mrk Этот вопрос лучше подходит для stats.stackexchange.com - person Dr. Snoopy; 13.02.2019
comment
@mrk Это не намек, то, что вы спрашиваете, не относится к теме переполнения стека. - person Dr. Snoopy; 13.02.2019
comment
@mrk meta.stackoverflow.com/questions/291009/ - person Dr. Snoopy; 13.02.2019

В случае, если у кого-то все еще есть такая же проблема, и слой merge не работает.

Я не смог найти merge в документации Keras, написанной доктором Снупи. И я получаю ошибку типа 'module' object is not callable.

Вместо этого я добавил слой Add.

Таким образом, тот же пример, что и ответ доктора Снупи, будет таким:

from keras.layers import Add, Convolution2D, Input

# input tensor for a 3-channel 256x256 image
x = Input(shape=(3, 256, 256))
# 3x3 conv with 3 output channels (same as input channels)
y = Convolution2D(3, 3, 3, border_mode='same')(x)
# this returns x + y.
z = Add()([x, y])
person Breno    schedule 03.06.2020