6

我正在尝试将 Keras 的Siamese层与共享Convolution2D层结合使用。我不需要输入在该层之前通过任何其他层,Siamese但该Siamese层需要指定输入层。我不知道如何创建输入层以匹配 conv 层的输入。Siamese我能找到的唯一使用层的具体示例是在使用层(带有矢量输入)作为输入的测试中。Dense基本上,我想要一个输入层,它允许我将图像尺寸指定为输入,以便它们可以传递到共享的 conv 层。

在代码中,我有以下内容:

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')

应该SomeInputLayer是什么?还是我的方法通常不正确?

4

1 回答 1

3

好吧,我想通了。“抽象”Layer类基本上是一个传递层,这正是我所需要的。我也犯了一个错误,我认为Siamese可以采用整个模型(即多层),但实际上它只需要一个层。为了减少创建这些连体层的痛苦,有一个add_shared_layer辅助函数。

我还应该指出这个拉取请求,它允许共享层到模型中的第一层,这正是我想要做的。

于 2016-02-05T17:04:16.170 回答