2017-08-27 86 views
0

我想在我的自定義功能集上運行使用Keras的LSTM。我已經在單獨的文件中訓練和測試功能。每個csv文件包含11列,最後一列作爲類標籤。我的數據集中共有40個課程。問題是我無法找出正確的input_shape到第一層。我已經探索了所有的stackoverflow和github,但仍然無法解決這個問題 下面是我的完整代碼。keras中LSTM的形狀不匹配

import numpy 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.layers import LSTM 

numpy.random.seed(7) 

train_dataset = numpy.loadtxt("train.csv", delimiter=",") 
X_train = train_dataset[:, 0:10] 
y_train = train_dataset[:, 10] 

test_dataset = numpy.loadtxt("test.csv", delimiter=",") 
X_test = test_dataset[:, 0:10] 
y_test = test_dataset[:, 10] 

model = Sequential() 

model.add(LSTM(32, return_sequences=True, input_shape=X_train.shape)) 
model.add(LSTM(32, return_sequences=True)) 
model.add(LSTM(32)) 
model.add(Dense(1, activation='softmax')) 
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 
model.fit(X_train, y_train, batch_size=10, epochs=1) 

score, acc = model.evaluate(X_test, y_test, batch_size=10) 
print('Test score:', score) 
print('Test accuracy:', acc * 100) 

無論我在input_shape參數中發生什麼變化,我都會在fit方法的第一個LSTM層中出錯。

回答

1

您在輸入中沒有時間維度。 RNN的輸入應爲(batch_size, time_step, features),而輸入的維數爲(batch_size, features)

如果你想用你的10列一次一個,你應該重塑陣列 numpy.reshape(train_dataset, (-1, train_dataset.shape[1], 1))

試試這個代碼:

train_dataset = numpy.loadtxt("train.csv", delimiter=",") 
train_dataset = numpy.reshape(train_dataset, (-1, train_dataset.shape[1], 1)) 

X_train = train_dataset[:, 0:10] 
y_train = train_dataset[:, 10] 

test_dataset = numpy.loadtxt("test.csv", delimiter=",") 
test_dataset = numpy.reshape(test_dataset, (-1, train_dataset.shape[1], 1)) 

X_test = test_dataset[:, 0:10] 
y_test = test_dataset[:, 10] 

model = Sequential() 

model.add(LSTM(32, return_sequences=True, input_shape=(X_train.shape[1], 1))) 
model.add(LSTM(32, return_sequences=True)) 
model.add(LSTM(32)) 
model.add(Dense(1, activation='softmax')) 
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 
model.fit(X_train, y_train, batch_size=10, epochs=1) 

score, acc = model.evaluate(X_test, y_test, batch_size=10) 
print('Test score:', score) 
print('Test accuracy:', acc * 100) 
+0

對不起,我沒能得到它。 –

+0

@KhurramShehzad嘗試新的片段,如果它不工作發佈錯誤。 – Muller20

+0

它在'model.fit(X_train,categorical_labels,epochs = 30)'時給了我錯誤,並且錯誤是'ValueError:檢查目標時的錯誤:期望的dense_1有形狀(無,1)但是有形狀的數組(7810,41 )' –