首页 > 解决方案 > TypeError:添加的层必须是类Layer的实例。找到:Tensor("input_1:0", shape=(None, 64, 64, 3), dtype=float32) -Python

问题描述

我实际上尝试制作一个卷积神经网络来对狗和猫进行分类(我是机器学习的新手,所以不要对我评价太差:))。我从这篇文章的标题中得到了完全相同的错误。老实说,我尝试从 Keras API 文档中学习,尝试从 stackoverflow、github、towardsdatascience 和其他人那里获得一些技巧。有人说error属于不同版本的tensorflow和keras库,也有人说属于syntax。我会把我的代码留在这里,告诉我哪里出错了,我愿意学习新的技巧。

#IMPORTING LIBRARIES
import tensorflow as tf
import pandas as pd
import keras
from keras.preprocessing.image import ImageDataGenerator



#IMAGE DATA PREPROCESSING

#preprocessing the training set
train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)
training_set = train_datagen.flow_from_directory(
        directory = r"C:\Users\Cucu\Downloads\training_set",
        target_size=(64 , 64),
        batch_size=32,
        class_mode='binary')

#preprocessing the test set
test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
        directory = r"C:\Users\Cucu\Downloads\test_set",
        target_size=(64 , 64),
        batch_size=32,
        class_mode='binary')


 
#BULDING THE CNN
#
#
#initialising the cnn
cnn = tf.keras.models.Sequential()


#convolution
cnn.add(tf.keras.layers.Conv2D(filters = 32 , kernel_size = 3 , activation = 'relu' ))
cnn.add(keras.Input(shape=(64, 64, 3)))

#pooling
cnn.add(tf.keras.layers.MaxPool2D( pool_size = 2 , strides = 2))


#adding a SECOND CONVOLUTIONAL LAYER
cnn.add(tf.keras.layers.Conv2D(filters = 32 , kernel_size = 3 , activation = 'relu'))
cnn.add(tf.keras.layers.MaxPool2D( pool_size = 2 , strides = 2))


#flattening
cnn.add(tf.keras.layers.Flatten())


#full connection
cnn.add(tf.keras.layers.Dense(units = 128 , activation = 'relu'))


#adding the output layer
cnn.add(tf.keras.layers.Dense(units = 4 , activation = 'sigmoid'))

并且错误(与标题完全相同)是:

TypeError: The added layer must be an instance of class Layer. Found: Tensor("input_1:0", shape=(None, 64, 64, 3), dtype=float32)

非常感谢那些能给我一些提示的人。我知道这是一个额外的完整初学者级别,但你知道,有时你必须沿着实践经验学习:)

标签: pythonkerasconv-neural-networktypeerror

解决方案


代替 :

#convolution
cnn.add(tf.keras.layers.Conv2D(filters = 32 , kernel_size = 3 , activation = 'relu' ))
cnn.add(keras.Input(shape=(64, 64, 3)))

经过 :

cnn.add(tf.keras.Input(shape=(64, 64, 3)))
cnn.add(tf.keras.layers.Conv2D(filters = 32 , kernel_size = 3 , activation = 'relu' ))

通常,该Input层是网络的第一层,您应该在和之间keras进行选择tf.keras(最好是第二层)


推荐阅读