0

我正在使用对手写字符进行分类并遵循我的 CNN 模型。我已将图像转换为灰度并二值化。我怎么解决这个问题?

model = models.Sequential()

model.add(layers.Conv2D(filters=10,kernel_size=(3,3),padding = 'same', input_shape=(100, 100, 3),activation = 'relu'))
model.add(layers.Conv2D(30,(5,5),activation='relu'))

model.add(layers.MaxPooling2D(pool_size=(2,2)))

model.add(layers.Dropout(0.5))

model.add(layers.Conv2D(40,(3,3),activation='relu'))
model.add(layers.Conv2D(60,(3,3),activation='relu'))

model.add(layers.MaxPooling2D(pool_size=(2,2)))

model.add(layers.Flatten())

model.add(layers.Dense(180,activation='relu'))

model.add(layers.Dropout(0.5))

model.add(layers.Dense(100,activation='relu'))
model.add(layers.Dense(12,activation='softmax'))

错误

ValueError: Input 0 of layer sequential_41 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 100, 100]
4

1 回答 1

0

在您的模型中,您已将输入形状声明为(100,100,3). 该模型需要一个 3 通道图像,但您已经说过您的输入数据是灰度的,这意味着它只有一个通道。这意味着您的输入数据的形状是(100,100,1),那么它就是(100,100)。随着batch_size维度的增加,它变成[None,100,100]了你得到的错误。

将输入形状更改为(100,100,1)应该可以解决问题。

于 2020-07-20T08:23:56.573 回答