我正在尝试使用CNN进行情感分析我的代码我的数据有(1000,1000)形状当我将数据传递给convolution2D时它给我一个错误。我无法解决。我试过下面的解决方案,但仍面临问题。 When bulding a CNN, I am getting complaints from Keras that do not make sense to me.
我的代码如下。
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)
您的神经网络期望数据是四维的。尺寸是(samples, rows, columns, channels)
。您的输入数据似乎只是二维的。您需要添加第一个维度,因为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'])