Keras fchollet 5.4-visualizing-what-convnets-learn input_13:0既输入又获取错误

Keras fchollet 5.4-visualizing-what-convnets-learn input_13:0既输入又获取错误,keras,keras-layer,Keras,Keras Layer,使用Keras 2.2.4,我正在用我的方式浏览这个笔记本,除了我用一个。Kaggle模型的第一层如下所示,后面是示例代码的其余部分 def get_unet_512(input_shape=(512, 512, 3), num_classes=1): inputs = Input(shape=input_shape) ... Layer (type) Output Shape Param #

使用Keras 2.2.4,我正在用我的方式浏览这个笔记本,除了我用一个。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.

是否有人对如何解决此问题有任何建议?

此错误是由以下原因造成的:

layer_outputs = [layer.output for layer in model.layers[:8]]
,它表示第一层(输入层)是fed和fetch

这里有一个解决方法:

import keras.backend as K
layer_outputs = [K.identity(layer.output) for layer in model.layers[:8]]
编辑: 完整示例,代码改编自:


谢谢你,基尼昂2345。我做了那个更改,得到了这个错误值error:模型的输出张量必须是Keras层`(因此保存过去的层元数据)的输出。找到:Tensor(“Identity_229:0”,shape=(?,512,512,3),dtype=float32)`根据您的注释,我将有问题的行更改为layer_outputs=[layer.output for layer in model.layers[1:8]],并认为它工作正常。你认为这种方法有什么问题吗?@foobar8675对不起,我没有注意到'layer_outputs=[K.identity(layer.output)for layer in model.layers]`这一行。您放弃输入层的解决方案是非常合理的。但是如果你想把输入层也包括进来,你可以使用我添加的解决方案。非常感谢!
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)