为什么每一层都采用初始输入数组形状而不是上一层的输出

时间:2019-04-07 14:52:41

标签: python machine-learning keras deep-learning conv-neural-network

我的代码中的每一层都显示它期望数组形状,但是接收到的形状与输入数组尺寸相同

我在第一个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)

为什么会这样?谢谢您的回复。

1 个答案:

答案 0 :(得分:0)

该问题与输入形状无关;相反,它与训练模型时要提供给模型的标签阵列的形状有关。错误中明确指出了这一点:

  

检查目标

时出错

此处“目标”是指模型的输出。在您的最小示例中,池化层的输出形状为(16, 64, 64, 64)

  

预计max_pooling3d_4具有形状(16、64、64、64)

但是,您给它的形状是(16, 128, 128, 1)输出

  

但数组的形状为(16,128,128,1)