Python ValueError:检查目标时出错:预期conv2d_3具有形状(1,58,58),但获得具有形状(1,64,64)的数组

Python ValueError:检查目标时出错:预期conv2d_3具有形状(1,58,58),但获得具有形状(1,64,64)的数组,python,keras,Python,Keras,我是Keras新手,我正在尝试使用图像(64x64,1通道)对序列分类和功能分类进行比较,这是我的模型(序列): x_pos是为keras(通道、行、列)重塑的图像阵列 来源在这里: 问题是,当我运行它时,它在seqmodel.fit处抛出一个错误: ValueError: Error when checking target: expected conv2d_3 to have shape (1,58,58), but got array with shape (1,64,64) 由于原始代

我是Keras新手,我正在尝试使用图像(64x64,1通道)对序列分类和功能分类进行比较,这是我的模型(序列):

x_pos是为keras(通道、行、列)重塑的图像阵列

来源在这里:

问题是,当我运行它时,它在seqmodel.fit处抛出一个错误:

ValueError: Error when checking target: expected conv2d_3 to have shape (1,58,58), but got array with shape (1,64,64)
由于原始代码不起作用,我做了一些修改以满足我的需要

编辑1:

我知道目标(x_pos_train)与输出层不同,但我想知道为什么会发生这种情况,因为代码应该可以工作。

由于您的第三个卷积层需要一个大小为(1、64、64)的数组,因此您必须在缩小输入大小的层(本例中为第二和第三个卷积层)中使用“相同”填充,以限制它们更改输入数组的大小。 因此,代码将如下所示:

seqmodel = Sequential()

seqmodel.add(Conv2D(32, (3,3), activation='relu', padding='same', input_shape=(1,64,64)))
seqmodel.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

seqmodel.add(Conv2D(32, (3,3), activation='relu', padding='same'))
seqmodel.add(UpSampling2D((2, 2)))

seqmodel.add(Conv2D(1, (3,3), activation='sigmoid', padding='same'))

查看
seqmodel.summary()
并记下最后一层的形状,然后
print(x_pos_train.shape)
您会注意到错误是这样说的。您在第二和第三个卷积中没有提到
padding='same'
layer@Ashar7成功了!天哪,我从没想过这件事。非常感谢你。也许新版本的keras上发生了一些变化,因为我修改了代码,而源代码中没有。@MACACO94是的,请记住,如果有任何错误与输入或输出的形状有关,请先检查模型摘要。我将添加它作为帮助其他人的答案
seqmodel = Sequential()

seqmodel.add(Conv2D(32, (3,3), activation='relu', padding='same', input_shape=(1,64,64)))
seqmodel.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

seqmodel.add(Conv2D(32, (3,3), activation='relu', padding='same'))
seqmodel.add(UpSampling2D((2, 2)))

seqmodel.add(Conv2D(1, (3,3), activation='sigmoid', padding='same'))