我对机械学习很陌生,当我在看卷积神经网络的教程时,我想自己实验如何提高精度。然而,当我试图在我的模型中添加另一个卷积和池化层时,它显示了一条错误消息。这是在我添加层之前:
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, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), 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, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(62))
这是它给我的错误信息:
ValueError:对于"{{node conv2d_36/conv2d}}=conv2d[T=DT_FLOAT,data_format="NHWC",expansions=[1,1,1,1],explicit_paddings=[],paddings=";"VALID";,progress=[1,1,11],use_cudnn_on_gpu=true](max_pooling2d_26/MaxPool,conv2d_36/conv2d/ReadVariableOp(',输入形状:[?,1,1,64],[3,3,64,64]。网站: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, (3, 3), activation='relu', padding='same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(62))
model.summary()