Python 预期conv2d_1_输入具有4维,但获得了具有形状的数组(15936,64)

Python 预期conv2d_1_输入具有4维,但获得了具有形状的数组(15936,64),python,tensorflow,keras,deep-learning,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')

你好,我是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_输入有4个维度,但得到了具有形状的数组(15936,64)

请原谅,如果这是一个愚蠢的问题或答案是很容易的,但我试图理解模型,我已经尝试了一些解决方案,但它仍然给出错误。感谢您的帮助。

来自keras:

二维卷积层(例如图像上的空间卷积)

该层创建一个卷积内核,该内核与层输入卷积以产生输出张量。如果use_bias为True,则创建一个偏差向量并将其添加到输出中。最后,如果激活不是None,那么它也将应用于输出

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

您拥有的是19920个样本和64个特征,假设这是正确的,您可能应该选择1D卷积层。1D卷积层接受2D输入,内核本身就是1D

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

输入形状 带形状的三维张量:(批次、步骤、通道)


卷积用于利用空间局部性很重要这一事实,例如,近像素对于找到边缘或对某事物进行分类很重要。对于表格数据来说,情况完全是这样。如果您仍然希望使用NN来解决此问题,您可能希望使用MLP,例如任务的密集层。那么除了去掉卷积部分,你不需要做任何事情


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

我了解批处理,但您能否提供一些有关步骤和通道的见解。例如,在Conv2D中,我给出了32个3X3的过滤器,然后我给出了输入的大小,然后是激活,那么这里是什么步骤和通道,我应该在哪里给出激活和过滤器。我只知道二维卷积,我从未尝试过一维。“通道”相当于你的样本,“步骤”相当于你的特征,即你有19920个通道和64个步骤