添加的层必须是类Layer的实例。找到:<tensorflow.python.keras.engine.input_layer.InputLayer对象位于0x000001FA104CBB70>

Rst*_*nbl 5 keras tensorflow transfer-learning vgg-net finetunning

我是机器学习的新手。我正在按照本教程对VGG16模型进行微调。

该模型可以使用以下代码很好地加载:

vgg_model = tensorflow.keras.applications.vgg16.VGG16()
Run Code Online (Sandbox Code Playgroud)

但出现此错误:

TypeError: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.input_layer.InputLayer object at 0x000001FA104CBB70>
Run Code Online (Sandbox Code Playgroud)

运行此代码时:

model = Sequential()
for layer in vgg_model.layers[:-1]:
    model.add(layer)
Run Code Online (Sandbox Code Playgroud)

依存关系:

  • Keras 2.2.3
  • Tensorflow 1.12.0
  • 张量流-gpu1.12.0
  • 的Python 3.6.0

我正在关注此博客,但我想使用VGG16。

任何帮助解决此问题的方法将不胜感激。非常感谢。

kga*_*har 8

添加到@Manoj Mohan 的答案中,您可以添加一个input_layer到您的model使用中input_layer,Keras layers如下所示:

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

model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....
Run Code Online (Sandbox Code Playgroud)

如果您使用的是TensorFlow内置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))
....
Run Code Online (Sandbox Code Playgroud)

来到主要部分,如果您想将层导入到您的顺序模型中,您可以使用以下语法。

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)
Run Code Online (Sandbox Code Playgroud)


Man*_*han 6

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

vgg_model = tensorflow.keras.applications.vgg16.VGG16()
model = keras.Sequential()
model.add(vgg_model.layers[0])
Run Code Online (Sandbox Code Playgroud)

实例化tensorflow.keras.Sequential()。这将起作用。

model = tensorflow.keras.Sequential()
model.add(vgg_model.layers[0])
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是一种场景:将“keras.Sequential()”与“tf.keras.Sequential()”混合。另一个问题是“Input”(它是一个张量)与“InputLayer”(它是一个层),可以添加到“Sequential”模型中。但是,我得到了一些代码,将“Input”添加到“Sequential”模型中,并且它对其他人(具有不同的配置/版本等)有效。(我需要修补这段代码......) (2认同)