Keras-vis给出以下错误:AttributeError:多个入站节点

M. *_*len 6 python deep-learning keras

我正在尝试使用自己的模型遵循以下示例

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         (None, 150, 150, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 150, 150, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 150, 150, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 75, 75, 64)        0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 75, 75, 128)       73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 75, 75, 128)       147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 37, 37, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 37, 37, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 37, 37, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 37, 37, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 18, 18, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 18, 18, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 18, 18, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 18, 18, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 9, 9, 512)         0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 4, 4, 512)         0         
_________________________________________________________________
sequential_1 (Sequential)    (None, 1)                 2097665   
=================================================================
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

AttributeError:Layer Sequence_2具有多个入站节点,因此“层输出”的概念定义不明确。使用get_output_at(node_index)代替。

我不知道从哪里开始。经过一些搜索,我认为这与最后一层是顺序层而不是示例中的VGG16模型中的密集层有关。

该模型像Keras的Cat或Dog实例一样进行了微调。

我将如何从此处进行任何帮助或想法,将不胜感激!

编辑:万一有助于查看代码:

model = load_model('final_finetuned_model.h5')

layer_idx = utils.find_layer_idx(model, 'sequential_1')

model.layers[layer_idx].activation = activations.linear
model = utils.apply_modifications(model)

plt.rcParams['figure.figsize'] = (18, 6)

img1 = utils.load_img('test1/cat/5.jpg', target_size=(150, 150))
img2 = utils.load_img('test1/cat/6.jpg', target_size=(150, 150))

for modifier in [None, 'guided', 'relu']:
    plt.figure()
    f, ax = plt.subplots(1, 2)
    plt.suptitle("vanilla" if modifier is None else modifier)
    for i, img in enumerate([img1, img2]):
        # 20 is the imagenet index corresponding to `ouzel`
        grads = visualize_cam(model, layer_idx, filter_indices=20,
                              seed_input=img, backprop_modifier=modifier)
        # Lets overlay the heatmap onto original image.
        jet_heatmap = np.uint8(cm.jet(grads)[..., :3] * 255)
        ax[i].imshow(overlay(jet_heatmap, img))

plt.show()
Run Code Online (Sandbox Code Playgroud)

Yuv*_*paz 7

对于具有两个输出节点、dense_1_1/Relu:0 和Sequence_2/dense_1/Relu:0 的非常相似的网络,我遇到了类似的错误。我的解决方案是转到 loss.py 并更改layer_output = self.layer.outputlayer_output = self.layer.get_output_at(-1). 这与其说是解决方案,不如说是一种变通方法。当有一个输出节点时,取最后一个 [-1] 很好,当有两个节点取最后一个时,对我有用。但这应该给你领先。如果您有其他节点,也可以尝试 layer_output = self.layer.get_output_at(0) 或其他节点。有一个相关的悬而未决的问题在这里