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

时间:2019-04-03 15:52:30

标签: machine-learning keras deep-learning artificial-intelligence conv-neural-network

我正在尝试使用CNN进行情感分析 我的代码将数据传递给convolution2D时,我的数据的形状为(1000,1000),这将引发错误。我无法解决。 我尝试下面的解决方案,但仍然面临问题。 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)

3 个答案:

答案 0 :(得分:0)

我可能是错的,但对我来说,您需要扩展数据范围以与您的网络相对应:

like:

let mainArray = ["1", "2", "3", "7", "10", "4", "5", "6", "9", "12", "16", "11", "13", "14", "15"]
let valueCheck = "3"

//check value present or not in array

if mainArray.contains(valueCheck){

    //if yes print next value from match value
    let checkedValueindex = mainArray.firstIndex(of: valueCheck)
    let valuePresentIndex = mainArray.index(after: checkedValueindex!)
    print(mainArray[valuePresentIndex])
}

答案 1 :(得分:0)

您的神经网络希望数据是四维的。尺寸为(samples, rows, columns, channels)。您的输入数据似乎只是二维的。您需要添加第一个维度即样本,因为Keras希望在输入中获得更多样本。您可以使用

将样本尺寸添加到当前输入矩阵
X = X[np.newaxis, ...]

它将为尺寸为1的样本添加第一维。 您还需要为当前缺少的渠道添加维度,作为最后一个维度。

可以通过以下步骤一步一步地完成这两项操作:

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

答案 2 :(得分:0)

我添加了嵌入层,并用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'])