Convolutional2D de rede Siamese em Keras

votos
4

Eu estou tentando usar de Keras Siamese camada em conjunto com um compartilhada Convolution2Dcamada. Não preciso a entrada passar através de quaisquer outras camadas antes de a Siamesecamada, mas a Siamesecamada exige que as camadas de entrada ser especificado. Eu não consigo descobrir como criar as camadas de entrada para coincidir com a entrada da camada de conv. O único exemplo concreto da Siamesecamada a ser utilizada eu poderia encontrar está nos testes , onde Denseas camadas (com entradas de vector) são utilizadas como entrada. Basicamente, eu quero uma camada de entrada, que me permite especificar as dimensões da imagem como entrada para que possam ser passados para a camada conv compartilhada.

No código que eu tenho algo como o seguinte:

img_rows = 28
img_cols = 28
img_input_shape = (1, img_rows, img_cols)

shared = Sequential()

shared.add(Convolution2D(nb_filters, nb_conv, nb_conv,
                        border_mode='valid',
                        input_shape=img_input_shape))
shared.add(Activation('relu'))
# .... more layers, etc.

right_input_layer = SomeInputLayer(input_shape=img_input_shape) # what should SomeInputLayer be?
left_input_layer = SomeInputLayer(input_shape=img_input_shape)
siamese = Siamese(shared, [left_input_layer, right_input_layer], merge_mode='concat')

model = Sequential()
model.add(siamese)
# ...
model.compile(loss=contrastive_loss, optimizer='rmsprop')

O que deve SomeInputLayerser? Ou é a minha appraoch em geral incorreta?

Publicado 04/02/2016 em 22:26
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Ok, eu percebi isso. O "abstrato" Layerclasse é basicamente um passe através da camada que é exatamente o que eu preciso. Eu também estava cometendo um erro em que eu pensei que Siamesepoderia ter um modelo inteiro (ou seja, várias camadas), mas na verdade só tem uma única camada. Para fazer com que a criação dessas camadas siameses menos dolorosas há uma add_shared_layerfunção auxiliar.

Gostaria também de salientar esta solicitação de recebimento que permitiria uma camada compartilhada para a primeira camada em um modelo, exatamente o que estou tentando fazer.

Respondeu 05/02/2016 em 15:04
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more