期望ndim = 3,发现ndim = 2,如何将稀疏矩阵馈送到keras中的LSTM层?

时间:2017-10-07 04:27:31

标签: tensorflow keras lstm

我正在使用Keras构建一个LSTM模型。我使用TfidVectorizer()将我的数据帧转换为单词标记。 tfidvectorizer()的transform方法返回csr_matrix,当我输入LSTM层时,我总是得到一个错误

" ValueError:输入0与图层lstm_1不兼容:预期ndim = 3,找到ndim = 2"

下面是我的python代码

Movie.create(movieObj, function(err, _){
                            console.log(err)
                        })

我是ML世界的新手,请帮助找出我在这里做错了什么。 可以提前感谢。

1 个答案:

答案 0 :(得分:0)

我已经将稀疏矩阵转换为数组并改变了它的尺寸,然后它完美地工作了。

这是完整的代码。

  dfTest = pd.read_csv("C:\\ML\\test.csv",
              dtype={'url': np.str, 'name': np.str, 'verdict': np.int32},
              error_bad_lines = False,  sep=',', delimiter=',', header=0,
              names=['url', 'name', 'verdict'])

dataFrame = dfTest['url'] + " "+ dfTest['name']
target = dfTest['verdict']

tk1 = TfidfVectorizer(max_features  = 1000);

tk1.fit(dataFrame)
matrix  = tk1.transform(dataFrame)

matrix = matrix.toarray()
data = np.reshape(matrix, matrix.shape + (1,))
target = np.reshape(target, target.shape + (1,))
print(target)
print(data.shape)

model1 = Sequential()
model1.add(LSTM(128, dropout_W=0.2, dropout_U=0.2, input_shape= 
data.shape[1:]))
model1.add(Dense(1))
model1.add(Activation('sigmoid'))

model1.compile(loss='binary_crossentropy', optimizer='rmsprop')
model1.fit(data, y=target, batch_size=200, nb_epoch=5, verbose=1, 
validation_split=0.2, shuffle=True)