Keras 中的卷积二维连体网络
Convolutional2D Siamese Network in Keras
我正在尝试将 Keras 的 Siamese 层与共享的 Convolution2D
层结合使用。
我不需要输入在 Siamese
层之前通过任何其他层,但 Siamese
层需要指定输入层。我不知道如何创建输入层来匹配转换层的输入。我能找到的 Siamese
层的唯一具体示例是在 tests 中,其中 Dense
层(带有矢量输入)用作输入。基本上,我想要一个输入层,它允许我将图像尺寸指定为输入,以便它们可以传递到共享转换层。
在代码中我有如下内容:
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
应该是什么?还是我的方法大体上不正确?
好的,我明白了。 "abstract" Layer
class 基本上是一个传递层,这正是我所需要的。我也犯了一个错误,我认为 Siamese
可以采用整个模型(即多层),但实际上它只需要一个层。为了减轻创建这些 Siamese 层的痛苦,有一个 add_shared_layer
辅助函数。
我还应该指出这个 pull request 允许共享层到模型中的第一层,这正是我想要做的。
我正在尝试将 Keras 的 Siamese 层与共享的 Convolution2D
层结合使用。
我不需要输入在 Siamese
层之前通过任何其他层,但 Siamese
层需要指定输入层。我不知道如何创建输入层来匹配转换层的输入。我能找到的 Siamese
层的唯一具体示例是在 tests 中,其中 Dense
层(带有矢量输入)用作输入。基本上,我想要一个输入层,它允许我将图像尺寸指定为输入,以便它们可以传递到共享转换层。
在代码中我有如下内容:
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
应该是什么?还是我的方法大体上不正确?
好的,我明白了。 "abstract" Layer
class 基本上是一个传递层,这正是我所需要的。我也犯了一个错误,我认为 Siamese
可以采用整个模型(即多层),但实际上它只需要一个层。为了减轻创建这些 Siamese 层的痛苦,有一个 add_shared_layer
辅助函数。
我还应该指出这个 pull request 允许共享层到模型中的第一层,这正是我想要做的。