【问题标题】:Keras, siamese network, how to abstract feature?Keras,连体网络,如何抽象特征?
【发布时间】:2017-04-23 17:25:55
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    现在再次对整个数据集调用 model.predict() 函数,您将获得数据集中每个图像的特征。

    看看this

    希望这会有所帮助!

    【讨论】:

    • 我面临以下错误!图表已断开:无法在“input_69”层获取张量 Tensor("input_69:0", shape=(?, 1, 80, 80), dtype=float32) 的值。访问以下先前层没有问题:[]
    【解决方案2】:

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

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

    【讨论】:

    • 我遇到错误 | ValueError: Graph disconnected: 无法在“input_2”层获得张量 Tensor("input_2:0", shape=(?, 1, 80, 80), dtype=float32) 的值。访问以下先前层没有问题:[]
    【解决方案3】:

    我是这样做的(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,因为我的密集层很精细(这是输出向量)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多