2017-10-07 3 views
0

私はKerasを使用して1つのLSTMモデルを構築しています。私はデータフレームをワードトークンに変換するためにTfidVectorizer()を使用しました。期待されるndim = 3、ndim = 2が見つかりました。ケラスのLSTMレイヤーに疎行列を供給する方法は?

「:入力0は、層lstm_1と互換性がないndim = 3期待、ndim = 2を発見したとValueErrorが」tfidvectorizer()の変換方法は、私はLSTM層に供給csr_matrixを返し、私はいつも

がエラーを取得します以下

が私のpythonコード

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'] 
lstData = [] 
for row in dataFrame: 
    row = row.replace('http://www.', ' ') 
    row = row.replace('.', ' ') 
    row = row.replace('/', ' ') 
    row = row.replace('com', ' ') 
    lstData.append(row) 

print(lstData) 


tk1 = TfidfVectorizer(max_features = 1000); 

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

print(matrix.shape) 
print(matrix) 


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

model1 = Sequential() 
model1.add(LSTM(128, dropout_W=0.2, dropout_U=0.2, input_shape= (5,))) 
model1.add(Dense(1)) 
model1.add(Activation('sigmoid')) 

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

である私は、MLの世界に新しいです、PL私はここで間違ってやっているものを見つけるためのお手伝い。 ありがとうございます。

答えて

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) 
関連する問題