在构建顺序模型时如何解决“添加的层必须是类层的实例”?

时间:2019-05-11 10:36:37

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

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

#import statements

将tensorflow导入为tf

来自tensorflow导入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>

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

请在顶部向我们显示导入声明。如果您使用

from keras import models

然后在将tf.keras图层添加到keras模型中时会出现此错误。

不幸的是,keras和tf.keras不兼容。

如果将导入更改为:

from tensorflow.keras import models

然后您的代码应该可以工作。

答案 1 :(得分:0)

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

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)