代码之家  ›  专栏  ›  技术社区  ›  thebeancounter

从非最终Keras模型层获取输出

  •  0
  • thebeancounter  · 技术社区  · 7 年前

    我在TensorFlow上使用Ubuntu和python 3以及Keras,我尝试使用预先培训的Keras模型中的传输学习创建一个模型,如前所述。 here :

    我使用以下代码

    import numpy as np
    from keras.applications import vgg16, inception_v3, resnet50, mobilenet
    from keras import Model
    
    a = np.random.rand(1, 224, 224, 3) + 0.001
    a = mobilenet.preprocess_input(a)
    
    mobilenet_model = mobilenet.MobileNet(weights='imagenet')
    
    mobilenet_model.summary()
    inputLayer = mobilenet_model.input
    
    m = Model(input=inputLayer, outputs=mobilenet_model.get_layer("conv_pw_13_relu")(inputLayer))
    m.set_weights(mobilenet_model.get_weights()[:len(m.get_weights())])
    p = m.predict(a)
    print(np.std(p), np.mean(p))
    print(p.shape)
    

    2 回复  |  直到 7 年前
        1
  •  2
  •   Agost Biro    7 年前

    层与层的输出之间的角膜存在差异。您可以将层视为表示计算,将输出视为这些计算的结果。当你实例化一个 Model 对象,它期望计算结果作为输出,而不是计算本身,因此会产生错误。要修复它,可以将层的输出传递给 模型 构造函数:

    import numpy as np
    from keras.applications import vgg16, inception_v3, resnet50, mobilenet
    from keras import Model
    
    a = np.random.rand(24, 224, 224, 3)
    a = mobilenet.preprocess_input(a)
    
    mobilenet_model = mobilenet.MobileNet(weights='imagenet')
    
    mobilenet_model.summary()
    
    model_output = mobilenet_model.get_layer("conv_pw_13_relu").output
    m = Model(inputs=mobilenet_model.input, outputs=model_output)
    print(m.predict(a))
    
        2
  •  1
  •   Sreeram TP    7 年前

    为了获得角膜模型中中间层的输出,角膜提供了不同的方法。

    在这种情况下,您可以像这样获取所需层的输出

    model_out = mobilenet_model.get_layer("layer_you_want").output
    m = Model(input=inputLayer, outputs=model_out)
    

    有关此方法和其他可用方法的详细信息,请查看 this 文档

    推荐文章