我对神经网络很陌生,对它没有太多经验。我的问题如下:我有一个数组,877 个不同的数据点,每个数据点有 200 个特征。它是一个 PCA 简化的 TfIdf 矩阵,其中每一行对应于我的数据集中的一个文本块(例如一个段落本身)。我正在尝试为此数据(1 类或 0 类)创建一个二元分类器。我已经成功地使用线性 SVM 获得了 80% 的中低准确度,使用简单的 Dense NN 获得了大约 80% 的准确度,如下所示:
model = Sequential()
len = np.shape(X_train)[0]
dim = np.shape(X_train)[1]
model.add(Dense(100, input_dim=dim, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
#set up stopping
early_stopping = EarlyStopping(monitor='val_loss', patience=4, mode='auto')
#fit the model to the data
model.fit(X_train, y_train,epochs=500, batch_size=64,verbose = 1, validation_data =(X_test,y_test),callbacks = [early_stopping])
所以我发现 RNN 在自然语言处理中非常受欢迎。我尝试以大致相同的方式设置一个。但是,我知道我的数据应该有第三维。我很困惑这是如何工作的。我根据这个问题编写了代码:LSTM with keras this asker does not have 3 dimension in his data。他的作品究竟如何仅使用 2 个维度?我的代码如下:
model = Sequential()
len = np.shape(X_train)[0]
dim = np.shape(X_train)[1]
model.add(LSTM(output_dim = 100, input_length=len, input_dim = dim, return_sequences=True))
model.add(Dense(25, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
#set up stopping
early_stopping = EarlyStopping(monitor='val_loss', patience=4, mode='auto')
#fit the model to the data
model.fit(X_train, y_train,epochs=500, batch_size=64,verbose = 1, validation_data =(X_test,y_test),callbacks = [early_stopping])
有人可以解释一下这有何不同以及为什么我不断收到此错误:ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (877, 200)
我真的需要第三维吗?如果是这样,我应该如何将我的 2D(数据点,特征)数组转换为 3D?谢谢你的时间。
- - - - - - - - - - - - - - 编辑 - - - - - - - - - - - -------------
所以现在我已经将我的代码更改为:
X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
t_steps = np.shape(X_train)[1]
dim = np.shape(X_train)[2]
print(length,',',dim)
model.add(LSTM(output_dim = 100, input_shape = (t_steps,dim), return_sequences=True))
并收到以下错误(t_steps == 1 和 dim == 200)
ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (877, 1)
不知道从这里去哪里。
----------------------------------------编辑#2-------------------- ---------------
事实证明,如果我设置return_sequences = False
它有效。现在我的准确率是可怕的,47%。