预期conv2d_1_input具有4维,但数组的形状为(15936,64)

时间:2018-10-09 10:09:19

标签: python tensorflow keras deep-learning

你好,我是Deep Learning和Keras的新手,我正在做一个项目以学习Deep Learning和Keras。在这里,我做了一个模型。

Model = Sequential()
Model.add(Conv2D(32, (3, 3) , input_shape = (100,64,64,), padding = 'same', 
activation='relu'))
Model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
Model.add(MaxPooling2D(pool_size=(2, 2))) 
Model.add(Flatten()) #Conversion to Neurons
Model.add(Dense(512, activation='relu')) 
Model.add(Dense(1, activation='softmax'))

用于培训和试穿。

X = signalBuffer.transpose()
Y = np.ones([19920, 1], dtype = int)
x_train, x_test, y_train, y_test = train_test_split(X, Y, 
test_size=0.20,shuffle=True)
Model.fit(x_train, y_train,batch_size=100,epochs=epochs,validation_data= 
(x_test, y_test),shuffle=True)

这里,X具有19920行和64列,而Y具有19920行和1列。 训练和测试拆分正在正确执行。当我尝试拟合模型时,错误出现在最后一行。 错误是

  

ValueError:检查输入时出错:预期conv2d_1_input具有4维,但数组的形状为(15936,64)

请原谅我,如果这是一个愚蠢的问题或答案很容易,但是我试图理解该模型,并且尝试了一些解决方案,但仍然给出错误。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

来自喀拉拉邦documentation

  

2D卷积层(例如图像上的空间卷积)。

     

此层创建一个卷积内核,该卷积内核与该层输入进行卷积以产生输出张量。如果use_bias为True,则会创建一个偏差矢量并将其添加到输出中。最后,如果激活不为“无”,则它也将应用于输出。

     

在将此层用作模型的第一层时,请提供关键字参数input_shape(整数元组,不包括采样轴),例如input_shape =(128,128,3)用于data_format =“ channels_last”中的128x128 RGB图片。

您拥有的是19920个样本和64个要素,假设这是正确的,则可能应该改用1D卷积层。一维卷积层接受二维输入,内核本身就是一维

您可能需要进行一些更改以确保您的数据也采用正确的格式,因为Conv1D采用以下内容:

  

输入形状   具有以下形状的3D张量:(批,台阶,通道)

答案 1 :(得分:0)

卷积用于利用空间局部性很重要的事实,例如相互接近的像素对于找到边缘或对事物进行分类非常重要。表格数据很少出现这种情况。如果您仍然想使用NN来解决这个问题,则可能要使用MLP,例如您的任务的密集层。然后,除了除去卷积部分,您无需执行任何其他操作。

如果数据是空间连接的,则可能要使用Conv1D图层。如previos帖子所述,输入形状是带有(批,步,通道)的3D张量。创建的参数数量取决于输入通道的数量和输出通道的数量,而与阶跃参数无关。例如。将数据重塑为(19920,1,64)将产生一个密集层。另一个极端是(19920,64,1),其中参数的数量仅取决于内核大小和传出通道映射。