我的代码中的每一层都显示它期望数组形状,但是接收到的形状与输入数组尺寸相同
我在第一个maxpooling层之后发表评论只是为了提示错误。如果您查看错误,它会期望(16,64,64,64),但是会说它收到了(16,128,128,1),恰好是我的输入数组。
model = Sequential()
model.add(Conv3D(64,3,activation= 'relu',padding='same',input_shape=(16, 128, 128 ,1)))
model.add(MaxPooling3D(pool_size=(1,2,2),strides= (1, 2, 2)))
#model.add(Conv3D(128,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))
#model.add(Conv3D(256,3,activation= 'relu',padding="same"))
#model.add(Conv3D(256,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))
#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))
#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))
#model.add(Dense(output_dim= 4096,activation= 'linear' ))
#model.add(Dense(output_dim= 4096,activation= 'softmax' ))
我收到的错误是
str(data_shape))
ValueError:检查目标时出错:预期max_pooling3d_4具有形状(16、64、64、64),但数组具有形状(16、128、128、1)
为什么会这样?谢谢您的回复。
答案 0 :(得分:0)
该问题与输入形状无关;相反,它与训练模型时要提供给模型的标签阵列的形状有关。错误中明确指出了这一点:
检查目标
时出错
此处“目标”是指模型的输出。在您的最小示例中,池化层的输出形状为(16, 64, 64, 64)
:
预计max_pooling3d_4具有形状(16、64、64、64)
但是,您给它的形状是(16, 128, 128, 1)
的输出:
但数组的形状为(16,128,128,1)