Keras,暹罗网络,如何抽象功能?

时间:2017-04-23 17:25:56

标签: keras conv-neural-network keras-layer

我正在尝试修改Keras Siamese Network示例以获取图片功能。

问题是,我如何获得图像功能?最后一层的输出只是一个数字。我该怎么做才能在euclidean_distance之前获得该功能?

3 个答案:

答案 0 :(得分:1)

您可以尝试首先在整个数据集上训练模型并保存。

再次加载模型,现在将输出图层设置为processed_aprocessed_b

现在再次调用整个数据集上的model.predict()函数,您将拥有数据集中每个图像的功能。

查看this

希望这有帮助!

答案 1 :(得分:1)

要在训练后从Keras siamese network MNIST示例中获取嵌入内容:

model_a = Model(inputs=model.input, outputs=processed_a)
model_a.predict([tr_pairs[:, 0], tr_pairs[:, 1]])

答案 2 :(得分:0)

我做到了以下几点(reference from my github post):

我训练有素的暹罗模型如下所示: siamese_model.summary()

image

请注意,我新重新定义的模型与以黄色突出显示的模型基本相同

然后重新定义了我想用于提取嵌入内容的模型(应该与您定义的模型相同,只是现在它不再具有像暹罗这样的多个输入),如下所示:< / p>

siamese_embeddings_model = build_siamese_model(input_shape)

siamese_embeddings_model .summary()

image

然后,我刚刚从训练有素的暹罗模型中提取权重并将其设置为新模型

embeddings_weights = siamese_model.layers[-3].get_weights()

siamese_embeddings_model.set_weights(embeddings_weights )

然后,您可以提供新图像以从新模型中提取嵌入内容

vector = siamese.predict(image)

len(vector[0])由于我的密集层(输出矢量)而将打印150张