Как исправить «добавленный слой должен быть экземпляром слоя класса» при построении последовательной модели?

Я пытаюсь добавить слои к последовательной модели, чтобы обучить ее данным fashion_mnist. Однако я постоянно получаю эту ошибку.

#import statements

импортировать тензорный поток как tf

из tenorflow import 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>

Может ли кто-нибудь помочь мне с этим, пожалуйста?


person Nayan Barde    schedule 11.05.2019    source источник


Ответы (2)


Пожалуйста, покажите нам операторы импорта вверху. Если вы использовали

from keras import models

то эта ошибка ожидается, поскольку вы добавляете слои tf.keras в модель keras.

К сожалению, keras и tf.keras несовместимы.

Если вы измените импорт на:

from tensorflow.keras import models

тогда ваш код должен работать.

person mostafa.elhoushi    schedule 13.05.2019
comment
Я добавил операторы импорта в сам вопрос, не могли бы вы взглянуть! - person Nayan Barde; 14.05.2019
comment
Хммм ... это выглядит странно ... похоже, вы импортируете все из tensorflow.keras, но глядя на пути к исходным файлам в журнале ошибок (например, python \ python36 \ lib \ site-packages \ keras \ models.py), это похоже, что код имеет дело с Керасом. Можете ли вы в своем коде заменить models.Sequential(... на tf.keras.moels.Sequential(... и посмотреть, что произойдет? - person mostafa.elhoushi; 14.05.2019

Я обнаружил аналогичную ошибку в своем коде:

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 и 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)
person AlohaWorld    schedule 08.12.2019