Я реализую ApesNet в keras. У него есть ApesBlock, который пропускает соединения. Как добавить это в последовательную модель в keras? ApesBlock состоит из двух параллельных слоев, которые в конце сливаются путем поэлементного добавления.
Реализация пропусков соединений в keras
Ответы (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
Итак, не будет ли это проблемой во время обратного распространения, потому что у y есть веса свертки, а у z есть новый тензор?
- person Siddhartha rao; 22.02.2017
@Siddhartharao Нет, поскольку все это символично, градиенты могут быть вычислены непосредственно TF/Theano.
- person Dr. Snoopy; 22.02.2017
+1 почему они называются остаточными соединениями? И какая идея стоит за этим? Может ли кто-нибудь помочь улучшить мое понимание?
- person mrk; 13.02.2019
@mrk Этот вопрос лучше подходит для stats.stackexchange.com
- person Dr. Snoopy; 13.02.2019
@mrk Это не намек, то, что вы спрашиваете, не относится к теме переполнения стека.
- person Dr. Snoopy; 13.02.2019
@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