【问题标题】:The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.engine.input_layer.InputLayer>添加的层必须是类Layer的一个实例。找到:<tensorflow.python.keras.engine.input_layer.InputLayer>
【发布时间】:2019-08-14 22:11:34
【问题描述】:

我是机器学习的新手。我在微调 VGG16 模型时关注了这个 tutorial

使用此代码可以正常加载模型:

vgg_model = tensorflow.keras.applications.vgg16.VGG16()

但得到这个错误:

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

运行此代码时:

model = Sequential()
for layer in vgg_model.layers[:-1]:
    model.add(layer)

依赖关系:

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

我正在关注blog,但我想使用 VGG16。

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

【问题讨论】:

  • 版本 Keras 2.2.4 tf.将 import from import from import keras.layers as layers 更改为 tensorflow.keras.layers as layers

标签: python tensorflow keras transfer-learning vgg-net


【解决方案1】:

这不起作用,因为 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])

【讨论】:

  • 是的,这是一种场景:将keras.Sequential()tf.keras.Sequential() 混合。另一个问题是Input(张量)与InputLayer(层),可以添加到Sequential 模型中。但是,我得到了一些将Input 添加到Sequential 模型的代码,它适用于其他人(具有不同的配置/版本等)。 (我需要修补此代码...)
【解决方案2】:

添加到@Manoj Mohan 的答案,您可以使用input_layerKeras layersinput_layer 添加到您的model,如下所示:

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

model = Sequential()
model.add(InputLayer(input_shape=shape, name=name))
....

如果你使用的是 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))
....

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

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)

【讨论】:

    【解决方案3】:

    您不需要创建 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
    

    【讨论】:

      【解决方案4】:

      上面的代码 sn-p 适用于TensorFlow 版本2.x。您可以通过使用以下命令升级 TensorFlow 来运行上述 sn-p:

      pip install --upgrade tensorflow
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 2020-07-02
        相关资源
        最近更新 更多