【问题标题】:How to fix 'the added layer must be an instance of class layer' while building a Sequential model?如何在构建顺序模型时修复“添加的层必须是类层的实例”?
【发布时间】:2019-09-29 01:33:22
【问题描述】:

我正在尝试向 Sequential 模型添加层,以使用 fashion_mnist 数据对其进行训练。但是,我反复收到此错误。

#import statements

将张量流导入为 tf

从张量流导入 keras

将 matplotlib.pyplot 导入为 plt

从 tensorflow.keras 导入模型


#Creating a sequential model
model=models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation=tf.nn.relu),tf.keras.layers.Dense(10,activation=tf.nn.softmax)])

#Compiling the model with optimizer and loss function
model.compile(optimizer='tf.train.AdamOptimizer',loss='sparse_categorical_crossentropy')

错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-4-ffa2750d675a> in <module>()
      1 #creating a sequential model
----> 2 model=models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation=tf.nn.relu),tf.keras.layers.Dense(10,activation=tf.nn.softmax)])

c:\users\admin\appdata\local\programs\python\python36\lib\site-packages\keras\models.py in __init__(self, layers, name)
    439         if layers:
    440             for layer in layers:
--> 441                 self.add(layer)
    442 
    443     def add(self, layer):

c:\users\admin\appdata\local\programs\python\python36\lib\site-packages\keras\models.py in add(self, layer)
    458             raise TypeError('The added layer must be '
    459                             'an instance of class Layer. '
--> 460                             'Found: ' + str(layer))
    461         if not self.outputs:
    462             # First layer in model: check that it is an input layer.

TypeError: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.layers.core.Flatten object at 0x00000254C648FE48>

谁能帮我解决这个问题?

【问题讨论】:

    标签: python-3.x tensorflow computer-vision sequential


    【解决方案1】:

    请在顶部向我们展示导入语句。如果你用过

    from keras import models
    

    那么当您将 tf.keras 层添加到 keras 模型时,预计会出现此错误。

    很遗憾,keras 和 tf.keras 不兼容。

    如果您将导入更改为:

    from tensorflow.keras import models
    

    那么您的代码应该可以工作。

    【讨论】:

    • 我已经在问题本身中添加了导入语句,请您看一下!
    • 嗯...这看起来很奇怪...您似乎正在从tensorflow.keras 导入所有内容,但查看错误日志中的源文件路径(例如,python\python36\lib\site- packages\keras\models.py),看来代码是在处理 Keras。在您的代码中,您能否将models.Sequential(... 替换为tf.keras.moels.Sequential(...,看看会发生什么?
    【解决方案2】:

    我在我的代码中发现了类似的错误:

    import tensorflow as tf
    from keras import Sequential, Embedding
    model = Sequential(name='embedding')
    model.add(Embedding(2, 2, input_length=7))
    model.compile('rmsprop', 'mse')
    model.predict(np.array([[0, 1, 0, 1, 1, 0, 0]]))
    

    然后我发现了这篇关于tensorflow 2.0 and keras的文章。

    在这篇文章中,作者说:

    现在 TensorFlow 2.0 发布了,keras 和 tf.keras 已经同步了, 暗示 keras 和 tf.keras 仍然是独立的项目;然而, 开发人员应该开始使用 tf.keras 作为 keras 包 将仅支持错误修复。

    然后我更改了代码,一切正常

    import tensorflow as tf
    import tensorflow.keras as k
    from tensorflow.keras.layers import Embedding
    import numpy as np
    
    model: k.Sequential = k.Sequential(name='embedding')
    em: Embedding = Embedding(2, 2, input_length=7)
    model.add(em)
    model.compile('rmsprop', 'mse')
    model.predict(np.array([[0, 1, 0, 1, 1, 0, 0]]))
    print("model.weights: ", model.weights)
    

    【讨论】:

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