python - 如何正确使用vgg模型的中间层

标签 python machine-learning keras keras-layer vgg-net

我所做的是:

from keras.applications.vgg16 import VGG16
from keras.layers import *
from keras.models import Model
import numpy as np 

vgg_model = VGG16(weights='imagenet', include_top=False, input_shape = (224,224, 3)) 

block5_conv3 = vgg_model.get_layer("block5_conv3").output

input_image = Input(shape=(224,224, 3), name='image_input')
vgg_out = vgg_model(input_image)

f0 = Flatten()(block5_conv3)

test_model = Model(inputs=input_image, outputs=f0)
print(test_model.summary())

但是我收到以下错误消息:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    test_model = Model(inputs=input_image, outputs=f0)
  File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 93, in __init__
    self._init_graph_network(*args, **kwargs)
  File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 237, in _init_graph_network
    self.inputs, self.outputs)
  File "C:\Users\wzhou\AppData\Local\Continuum\Anaconda2\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 1430, in _map_graph_network
    str(layers_with_complete_input))
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(?, 224, 224, 3), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []

我觉得我的做法有问题,但又找不到正确的方法。

最佳答案

在这种情况下不需要定义Input层。您可以使用 VGG 模型的 input 属性:

vgg_model = VGG16(weights='imagenet', include_top=False, input_shape = (224,224, 3)) 

block5_conv3 = vgg_model.get_layer("block5_conv3").output
f0 = Flatten()(block5_conv3)

test_model = Model(inputs=vgg_model.input, outputs=f0)

或者,您可以定义并使用 backend function :

from keras import backend as K

# ... (use the code above except the last line)

func = K.function([vgg_model.input], [f0])

# to call it:
outputs = func([your_image_arrays])

关于python - 如何正确使用vgg模型的中间层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52230874/

相关文章:

python - 需要帮助理解 pytorch 中的梯度函数

machine-learning - 在 Tensorflow 中使用 tf.assign 时的竞争条件

tensorflow - keras 的 model.fit 中没有 tf.Print 的结果

machine-learning - 如何在推理时向 Keras 中的激活添加噪声?

python - 将变量从一个 Python 脚本发送到另一个

python - 具有过多参数的函数 - Python

machine-learning - 自动文本分类训练需要多长时间

tensorflow - 如何在convnet中初始化过滤器

python - 为什么 Python 在打印回溯时从当前目录读取?

machine-learning - scikit learn 删除不太频繁的分类类