Machine learning 检查输入时出错:预期conv2d_1_输入有4个维度,但得到了形状为(8001000)的数组

Machine learning 检查输入时出错:预期conv2d_1_输入有4个维度,但得到了形状为(8001000)的数组,machine-learning,keras,deep-learning,artificial-intelligence,conv-neural-network,Machine Learning,Keras,Deep Learning,Artificial Intelligence,Conv Neural Network,我试图用CNN做情感分析 我的代码我的数据有(10001000)个形状当我把数据传递给convolution2D时,它给我一个错误。这是我无法解决的。 我尝试了下面的解决方案,但仍然面临问题。 我的代码如下 TfIdf = TfidfVectorizer(max_features=1000) X = TfIdf.fit_transform(x.ravel()) Y = df.iloc[:,1:2].values X_train, X_test, Y_train, Y_test = tr

我试图用CNN做情感分析 我的代码我的数据有(10001000)个形状当我把数据传递给convolution2D时,它给我一个错误。这是我无法解决的。 我尝试了下面的解决方案,但仍然面临问题。

我的代码如下

TfIdf = TfidfVectorizer(max_features=1000) 
X = TfIdf.fit_transform(x.ravel()) 
Y = df.iloc[:,1:2].values


X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2,random_state=1)

classifier = Sequential()

classifier.add(Convolution2D(32, kernel_size=(3,3), input_shape=(1000, 1000, 1), activation = 'relu'))

classifier.add(MaxPooling2D(pool_size=(2,2)))

classifier.add(Flatten())

classifier.add(Dense(output_dim =  128, activation='relu'))

classifier.add(Dense(output_dim =  1, activation='sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

classifier.fit(X_train, Y_train, batch_size = 10, nb_epoch = 100, validation_data=(X_test,Y_test))

(loss,accuracy) = classifier.evaluate(X_test,Y_test, batch_size =10)

print(accuracy)

我可能错了,但对我来说,您需要扩展您的数据维度,以符合您的网络:

比如:

X = np.expand_dims(X, axis=-1)

你的神经网络期望数据是四维的。尺寸是
(样本、行、列、通道)
。您的输入数据似乎只是二维的。您需要添加第一个维度,即样本,因为Keras希望在输入时获得更多样本。可以使用将样本的维度添加到当前输入矩阵中

X = X[np.newaxis, ...]
它将为大小为1的样本添加第一个维度。 您还需要添加通道的维度,该维度当前作为最后一个维度丢失

这两个操作可以通过以下步骤一步执行:

X = X[np.newaxis, ..., np.newaxis]

我添加了嵌入层,并用1d替换了2d卷积层。但是我的精度是恒定的,即使我改变了参数

这是我的密码

classifier = Sequential()

classifier.add(Embedding(1000,64,input_length=1000))

classifier.add(Convolution1D(32, kernel_size=3, activation = 'relu'))

classifier.add(MaxPooling1D(pool_size=2))

classifier.add(Flatten())

classifier.add(Dense(output_dim =  128, activation='relu'))

classifier.add(Dense(output_dim =  1, activation='sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) 

你们怎么说你们有输入形状(10001000),但你们有错误状态(8001000)?X_列的形状是什么?对于我的X_列,它是800100。我也尝试过给出输入_shape=X_列。shapeconv2d层要求输入形状为4D张量(样本、行、列、通道),其中样本为批量大小。你只有两个。你有什么样的数据?它是一个文本数据…在TFIDF之后,它的形状是10001000。你为什么决定使用2d卷积,它主要用于处理图像?如果这是一个序列,您需要使用递归网络或LSTM