问题描述
我对机器学习非常陌生,当我看卷积神经网络的教程时,我想独自尝试如何提高准确性。但是,当我尝试向模型添加另一个卷积和池化层时,它显示了一条错误消息。这是在我添加图层之前:
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64,activation='relu'))
model.add(layers.MaxPooling2D((2,activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(62))
这是在之后:
model = models.Sequential()
model.add(layers.Conv2D(32,activation='relu'))
model.add(layers.Dense(62))
这是它给我的错误消息:
ValueError:'{{node conv2d_36 / Conv2D}}的1中减去3导致的负尺寸大小= Conv2D [T = DT_FLOAT,data_format =“ NHWC”,膨胀= [1、1、1、1、1],explicit_paddings = [],padding =“ VALID”,步幅= [1、1、1、1],use_cudnn_on_gpu = true](max_pooling2d_26 / MaxPool,conv2d_36 / Conv2D / ReadVariableOp)',输入形状为[?,1,1,64 ],[3,3,64,64]。 site:stackoverflow.com
解决方法
这是因为您在网络内部降低了太多维度。在卷积层中使用padding='same'
来避免此尺寸错误
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation='relu',padding='same',input_shape=(28,28,1)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64,padding='same'))
model.add(layers.MaxPooling2D((2,padding='same'))
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(62))
model.summary()