【发布时间】:2017-04-23 17:25:55
【问题描述】:
我正在尝试修改Keras Siamese Network 示例以获取图像功能。
问题是,如何获得图像特征?最后一层的输出只是一个数字。在euclidean_distance之前我应该怎么做才能获得该功能?
【问题讨论】:
标签: keras conv-neural-network keras-layer
我正在尝试修改Keras Siamese Network 示例以获取图像功能。
问题是,如何获得图像特征?最后一层的输出只是一个数字。在euclidean_distance之前我应该怎么做才能获得该功能?
【问题讨论】:
标签: keras conv-neural-network keras-layer
您可以尝试先在整个数据集上训练模型并保存。
再次加载模型,现在将输出层设置为processed_a 和processed_b
现在再次对整个数据集调用 model.predict() 函数,您将获得数据集中每个图像的特征。
看看this
希望这会有所帮助!
【讨论】:
要在训练后从Keras siamese network MNIST 示例中获取嵌入:
model_a = Model(inputs=model.input, outputs=processed_a)
model_a.predict([tr_pairs[:, 0], tr_pairs[:, 1]])
【讨论】:
我是这样做的(reference from my github post):
我训练有素的连体模型如下所示:
siamese_model.summary()
注意我新定义的模型与黄色高亮的模型基本相同
我然后重新定义了我想用于提取嵌入的模型(它应该与您定义的模型相同,但现在它不会像 siamese 这样的多个输入)看起来像这样:
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,因为我的密集层很精细(这是输出向量)
【讨论】: