代码之家  ›  专栏  ›  技术社区  ›  user2458922 Maria

Keras模型中Resnet50的中间输出

  •  1
  • user2458922 Maria  · 技术社区  · 4 年前
    import keras
    print(keras.__version__)
    #2.3.0
    
    from keras.models import Sequential
    from keras.layers import Input, Dense,TimeDistributed
    from keras.models import Model
    
    model = Sequential()
    resnet = ResNet50(include_top = False, pooling = 'avg', weights = 'imagenet')
    model.add(resnet)
    
    model.add(Dense(10, activation = 'relu'))
    model.add(Dense(6, activation = 'sigmoid'))
    model.summary()
    

    ModelSummary()

    //培训//完成模型拟合(..)

    现在如何仅从层输出?

    model.layers[0]._name='resnet50'
    print(model.layers[0].name) # prints resnet50
    
    layer_output = model.get_layer("resnet50").output
    intermediate_model = Model(inputs=[model.input, resnet.input], outputs=[layer_output])
    result = intermediate_model.predict([x, x])
    
    print(result.shape)
    print(result[0].shape)
    

    收到错误

    AttributeError: 层resnet50具有多个入站节点,因此 “层输出”的概念定义不清。使用 get_output_at(node_index) 相反添加代码添加Markdown

    enter image description here

    0 回复  |  直到 4 年前
        1
  •  1
  •   user11530462 user11530462    4 年前

    请使用重试 tf.keras 以导入模型和图层。

    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Input, Dense,TimeDistributed
    from tensorflow.keras.models import Model
    

    然后运行相同的程序:

    model.layers[0]._name='resnet50'
    print(model.layers[0].name) # prints resnet50
    
    layer_output = model.get_layer("resnet50").output
    intermediate_model = Model(inputs=[model.input, resnet.input], outputs=[layer_output])
    
    x = tf.ones((1, 250, 250, 3))
    result = intermediate_model.predict([x, x])
    
    print(result.shape)
    print(result[0].shape)
    

    输出:

    resnet50
    (1, 2048)
    (2048,)
    
    推荐文章