我正在尝试修改Keras Siamese Network示例以获取图片功能。
问题是,我如何获得图像功能?最后一层的输出只是一个数字。我该怎么做才能在euclidean_distance
之前获得该功能?
答案 0 :(得分:1)
您可以尝试首先在整个数据集上训练模型并保存。
再次加载模型,现在将输出图层设置为processed_a
和processed_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()
请注意,我新重新定义的模型与以黄色突出显示的模型基本相同
我然后重新定义了我想用于提取嵌入内容的模型(应该与您定义的模型相同,只是现在它不再具有像暹罗这样的多个输入),如下所示:< / p>
siamese_embeddings_model = build_siamese_model(input_shape)
siamese_embeddings_model .summary()
然后,我刚刚从训练有素的暹罗模型中提取权重并将其设置为新模型
embeddings_weights = siamese_model.layers[-3].get_weights()
siamese_embeddings_model.set_weights(embeddings_weights )
然后,您可以提供新图像以从新模型中提取嵌入内容
vector = siamese.predict(image)
len(vector[0])
由于我的密集层(输出矢量)而将打印150张