python-3.x - 在使用 tensorflow keras 时,我收到错误消息说添加的层必须是类的实例,对于第一个 conv2D 层
问题描述
我正在尝试使用 cnn 模型将癌细胞图像分类为好、坏或平均。构建模型时出现以下错误。
TypeError Traceback
(most recent call last)
<ipython-input-12-40a51db8d561> in <module>()
3
4
----> 5
model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu',input_shape = (256,256,1)))
6
model.add(MaxPool2D(pool_size=5,padding='same'))
7
~\Anaconda3\envs\tensorflow\lib\site-
packages\keras\engine\sequential.py in add(self,
layer)
130 raise TypeError('The added layer must be '
131 'an instance of class Layer. '
--> 132 'Found: ' +
str(layer))
133 self.built = False
134 if not self._layers:
TypeError: The added layer must be an instance of class Layer. Found:
<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x00000162545A64A8>
谁能帮我找出问题所在。这是代码片段:
from tensorflow.keras.layers import Conv2D, MaxPooling2D
model = Sequential()
model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu',input_shape = (256,256,1)))
model.add(MaxPool2D(pool_size=5,padding='same')
model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))
model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(2,activation='softmax'))
optimizer = Adam(lr=le-3)
model.compile(loss='categorical_crossentropy',
optimizer=optimizer,
metrics=['accuracy']
)
model.fit(x=tr_img_data, y=tr_lbl_data,
batch_size=6,
epochs=8)
model.summary()
解决方案
我试过了,以下对我来说很好:
from tensorflow.python.keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.optimizers import Adam
model = Sequential()
model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu', input_shape = (256,256,1)))
model.add(MaxPooling2D(pool_size=5,padding='same'))
model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=5,padding='same'))
model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=5,padding='same'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(2,activation='softmax'))
optimizer = Adam(lr=1e-3)
model.compile(loss='categorical_crossentropy',
optimizer=optimizer,
metrics=['accuracy']
)
model.summary()
我唯一更改的是:更改MaxPool2D
为MaxPooling2D
,并且在其中一层之后也)
丢失了。编辑:添加了整个代码,除了.fit
完整性。
推荐阅读
- css - 单击项目时,我可以使光标从项目上移开吗?
- javascript - 从 HTML 元素中提取文本并创建对象
- java - Java - 如何在 HTTP GET 请求中设置本地存储值?
- node.js - 如何在 Angular 6 中制作“过滤器”
- ruby - 用 Regexp.Union 扫描如何在 union \b \ix 中使用带有选项的变量?
- r - R DT 包添加尾随零以对齐小数
- c++ - 线程如何更改睡眠时间
- xcode - 当我运行命令 react-native run-ios 时。为什么应用程序不存在?
- fortran - 在fortran中用零填充数组而不使用循环
- android - 如何在后台启动 Webview 或在后台加载 URL?