我正在构建一个简单的conv2d模型,但有时我会遇到这个错误。这是我的模型
model = Sequential()
model.add(Conv2D(32, (5,5), padding='same', activation='relu', kernel_initializer='he_normal', input_shape=(width, height, 1)))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.1))
model.add(Conv2D(64, (5,5), padding='same', activation='relu', kernel_initializer='he_normal'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(128, (5,5), padding='same', activation='relu', kernel_initializer='he_normal'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.3))
model.add(Flatten())
model.add(Dense(256))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(7))
model.add(Activation('softmax'))
model.summary()
在运行上面的代码后,我得到了这个错误:
TypeError Traceback (most recent call last)
<ipython-input-19-102b2ef28dea> in <module>
1 model = Sequential()
2
----> 3 model.add(Conv2D(32, (5,5), padding='same', activation='relu', kernel_initializer='he_normal', input_shape=(width, height, 1)))
4 model.add(BatchNormalization())
5 model.add(MaxPooling2D(pool_size=(2, 2)))
D:\anaconda\lib\site-packages\keras\engine\sequential.py in add(self, layer)
164 # and create the node connecting the current layer
165 # to the input layer we just created.
--> 166 layer(x)
167 set_inputs = True
168 else:
D:\anaconda\lib\site-packages\keras\engine\base_layer.py in __call__(self, inputs, **kwargs)
487 # Actually call the layer,
488 # collecting output(s), mask(s), and shape(s).
--> 489 output = self.call(inputs, **kwargs)
490 output_mask = self.compute_mask(inputs, previous_mask)
491
D:\anaconda\lib\site-packages\keras\layers\convolutional.py in call(self, inputs)
169 padding=self.padding,
170 data_format=self.data_format,
--> 171 dilation_rate=self.dilation_rate)
172 if self.rank == 3:
173 outputs = K.conv3d(
D:\anaconda\lib\site-packages\keras\backend\tensorflow_backend.py in conv2d(x, kernel, strides, padding, data_format, dilation_rate)
3715 padding=padding,
3716 data_format=tf_data_format,
-> 3717 **kwargs)
3718 if data_format == 'channels_first' and tf_data_format == 'NHWC':
3719 x = tf.transpose(x, (0, 3, 1, 2)) # NHWC -> NCHW
D:\anaconda\lib\site-packages\tensorflow\python\ops\nn_ops.py in convolution(input, filter, padding, strides, dilation_rate, name, data_format, filters, dilations)
892 data_format=data_format,
893 dilations=dilation_rate,
--> 894 name=name)
895
896
D:\anaconda\lib\site-packages\tensorflow\python\ops\nn_ops.py in convolution_internal(input, filters, strides, padding, data_format, dilations, name)
954 channel_index = 1 if data_format.startswith("NC") else n + 1
955
--> 956 strides = _get_sequence(strides, n, channel_index, "strides")
957 dilations = _get_sequence(dilations, n, channel_index, "dilations")
958
D:\anaconda\lib\site-packages\tensorflow\python\ops\nn_ops.py in _get_sequence(value, n, channel_index, name)
59 if value is None:
60 value = [1]
---> 61 elif not isinstance(value, collections.Sized):
62 value = [value]
63
D:\anaconda\lib\collections\__init__.py in __getattr__(name)
50 "of from 'collections.abc' is deprecated since Python 3.3,"
51 "and in 3.9 it will stop working",
---> 52 DeprecationWarning, stacklevel=2)
53 globals()[name] = obj
54 return obj
TypeError: issubclass() arg 2 must be a class or tuple of classes
我最近一直在面对这个问题。以前,我也建立过类似的模型,但没有得到这种类型的错误。我检查了conv2d文档,发现它有另一个名为strides=(1,1)的参数。所以我试着把它添加到conv2d层参数中,但没有帮助。
1条答案
按热度按时间jucafojl1#
我得到了同样的错误,我只是在model.add()函数中删除了参数之间的空间,然后解决了错误。
例如: