添加的层必须是类层的实例。找到:<;tensorflow.python.keras.engine.input_layer.InputLayer>;

添加的层必须是类层的实例。找到:<;tensorflow.python.keras.engine.input_layer.InputLayer>;,python,tensorflow,keras,transfer-learning,vgg-net,Python,Tensorflow,Keras,Transfer Learning,Vgg Net,我是机器学习新手。我在微调VGG16模型时遵循了这一点 模型加载了以下代码: vgg_model = tensorflow.keras.applications.vgg16.VGG16() model = Sequential() for layer in vgg_model.layers[:-1]: model.add(layer) 但是得到这个错误: TypeError: The added layer must be an instance of class Layer. Fo

我是机器学习新手。我在微调VGG16模型时遵循了这一点

模型加载了以下代码:

vgg_model = tensorflow.keras.applications.vgg16.VGG16()
model = Sequential()
for layer in vgg_model.layers[:-1]:
    model.add(layer)
但是得到这个错误:

TypeError: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.input_layer.InputLayer object at 0x000001FA104CBB70>
依赖项:

  • Keras 2.2.3
  • Tensorflow 1.12.0
  • tensorflow-gpu1.12.0
  • Python 3.6.0
我遵循这一点,但我想使用VGG16


如果您能帮助解决此问题,我们将不胜感激。非常感谢。

这将不起作用,因为tensorflow.keras层将添加到keras模型中

vgg_model = tensorflow.keras.applications.vgg16.VGG16()
model = keras.Sequential()
model.add(vgg_model.layers[0])
实例化tensorflow.keras.Sequential()。这会奏效的

model = tensorflow.keras.Sequential()
model.add(vgg_model.layers[0])

您不需要创建InputLayer,只需以与Conv2D/其他层相同的方式导入BatchNormalization层,例如:

from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dropout, BatchNormalization
而不是将其作为独立的Keras层导入,即:

from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dropout
from keras.layers import BatchNormalization

除了@Manoj Mohan的答案之外,您还可以使用来自Keras的
input\u layer
向您的
模型添加
input\u layer
,如下所示:

import keras
from keras.models import Sequential
from keras.layers import InputLayer

model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....
如果您使用的是
TensorFlow
builtin
Keras
,则导入是不同的,其他内容仍然相同

import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import InputLayer

model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....
对于主要部分,如果要将层导入到顺序模型中,可以使用以下语法

import keras
from keras.models import Sequential, load_model
from keras import optimizers
from keras.applications.vgg16 import VGG16
from keras.applications.vgg19 import VGG19

# For VGG16 loading to sequential model  
model = Sequential(VGG16().layers)
# For VGG19 loading to sequential model  
model = Sequential(VGG19().layers)

Keras 2.2.4 tf版。将导入从导入keras.layers作为层更改为tensorflow.keras.layers作为层是的,这是一种场景:将
keras.Sequential()
tf.keras.Sequential()
混合。另一个问题是
Input
(这是一个张量)与
InputLayer
之间的关系,后者是一个层,可以添加到
顺序
模型中。然而,我得到了一些代码,将
输入
添加到
顺序
模型中,并且它对其他人(具有不同的配置/版本等)有效。(我需要修补此代码…)