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

fchollet 5.4-可视化-what-convnets-学习输入_13:0同时输入和获取错误

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

    使用Keras 2.2.4,我正在用我的方式浏览这本笔记本 5.4-visualizing-what-convnets-learn 除了我用一个 unet one provided by Kaggle-Carvana-Image-Masking-Challenge . kaggle模型的第一层看起来是这样的,后面是示例代码的其余部分。

    def get_unet_512(input_shape=(512, 512, 3),
                     num_classes=1):
        inputs = Input(shape=input_shape)
    
    ...
    
    Layer (type)                    Output Shape         Param #     Connected to                     
    ==================================================================================================
    input_13 (InputLayer)           (None, 512, 512, 3)  0    
    ...
    
    from keras import models
    layer_outputs = [layer.output for layer in model.layers[:8]]
    activation_model = models.Model(inputs=model.input, outputs=layer_outputs)
    activations = activation_model.predict(img_tensor)
    
    

    现在我得到的错误是

    InvalidArgumentError: input_13:0 is both fed and fetched.
    

    有人对如何解决这个问题有什么建议吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   keineahnung2345 Daniel Ballinger    7 年前

    此错误由以下原因引起:

    layer_outputs = [layer.output for layer in model.layers[:8]]
    

    它表示第一层(输入层)同时被输入和获取。

    这里有一个解决方法:

    import keras.backend as K
    layer_outputs = [K.identity(layer.output) for layer in model.layers[:8]]
    

    编辑: 完整示例,代码改编自: Mask_RCNN - run_graph

    import numpy as np
    import keras.backend as K
    from keras.models import Sequential, Model
    from keras.layers import Input, Dense, Flatten
    
    model = Sequential()
    ip = Input(shape=(512,512,3,))
    fl = Flatten()(ip)
    d1 = Dense(20, activation='relu')(fl)
    d2 = Dense(3, activation='softmax')(d1)
    
    model = Model(ip, d2)
    model.compile('adam', 'categorical_crossentropy')
    model.summary()
    
    layer_outputs = [K.identity(layer.output) for layer in model.layers]
    #layer_outputs = [layer.output for layer in model.layers] #fails
    kf = K.function([ip], layer_outputs)
    activations = kf([np.random.random((1,512,512,3))])
    print(activations)