keras 如何修复Conv2d TypeError issubclass()arg 2必须是一个类或类的元组?

gzjq41n4  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(186)

我正在构建一个简单的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层参数中,但没有帮助。

jucafojl

jucafojl1#

我得到了同样的错误,我只是在model.add()函数中删除了参数之间的空间,然后解决了错误。
例如:

model.add(Conv2D(32,(5,5),padding='same',activation='relu',kernel_initializer='he_normal', input_shape=(width,height,1)))

相关问题