2016-10-06 39 views
1

我想了解LSTM RNN如何工作以及它們如何在Keras中實現以便能夠解決二進制分類問題。我的代碼和我使用的數據集在下面可見。當我編譯代碼時,我得到一個錯誤TypeError: __init__() got multiple values for keyword argument 'input_dim',任何人都可以幫忙嗎?keras中的LSTM實現使用特定的數據集

from keras.models import Sequential 
from keras.layers import LSTM 
from keras.layers.embeddings import Embedding 
from keras.layers import Dense 
from sklearn.cross_validation import train_test_split 
import numpy 
from sklearn.preprocessing import StandardScaler # data normalization 

seed = 7 
numpy.random.seed(seed) 
dataset = numpy.loadtxt("sorted output.csv", delimiter=",") 
X = dataset[:,0:4] 
scaler = StandardScaler(copy=True, with_mean=True, with_std=True) #data normalization 
X = scaler.fit_transform(X) #data normalization 
Y = dataset[:4] 
# split into 67% for train and 33% for test 
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=seed) 
# create model 
model = Sequential() 
model.add(Embedding(12,input_dim=4,init='uniform',activation='relu')) 
model.add(Dense(4, init='uniform', activation='relu')) 
model.add(LSTM(100)) 
model.add(Dense(1, init='uniform', activation='sigmoid')) 
# Compile model 
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
# Fit the model 
model.fit(X_train, y_train, validation_data=(X_test,y_test), nb_epoch=150, batch_size=10) 

enter image description here

+0

這與神經網絡theano或keras無關。唯一的問題似乎是'numpy.loadtxt(「sorted output.csv」,delimiter =「,」)'找不到'sorted output.csv'文件。你確定它存在於你啓動你的應用程序的目錄中嗎?也嘗試一個絕對路徑,如果這無助於嘗試刪除文件名中的空格。我只會相信你的「但我試圖導入的數據集存在」,如果你有python代碼確認這個文件在numpy函數被調用之前就存在了...... – example

+0

我確信我的數據集存在於工作目錄中,我在同一個數據集上嘗試了一個不同的NN(不是一個經常出現的),它工作得很好。所以唯一的選擇是我的RNN網絡沒有正確實施。 – Adriano10

+0

您的NN永遠不會看到文件名。因此它不會產生提供的錯誤。通常,當python發生錯誤時你會得到一個堆棧跟蹤。用它來找出錯誤發生的位置,併爲我們提供發生的線路。 – example

回答

0

貌似這裏有兩個獨立的問題。

關於如何使用LSTMs/Keras,有一些很好的教程。嘗試this one其中也描述了二元分類問題。如果你有一個你不明白的具體問題或方面,請告訴我。

關於文件打開問題,文件名中的空白可能導致問題。查看this answer以查看是否有幫助。

+0

我知道你提供的教程,我實際上已經成功創建了很多前饋NN。然而,這個問題發生在我嘗試構建一個遞歸神經網絡(對於我用於前饋神經網絡的相同數據集),特別是一個LSTM神經網絡 – Adriano10

0

這實際上就是您收到的錯誤信息完全適用的情況。 (我希望這將永遠與Python和Keras的情況下...)

Keras' 嵌入層構造具有this signature keras.layers.embeddings.Embedding(input_dim, output_dim, ...)

但是,你正在使用其構建: Embedding(12,input_dim=4,...)

因此,找出哪些是輸入和輸出維度,並分別修復您的參數順序和名稱。根據您在問題中包含的表格,我猜測4是您的輸入維度,12是您的輸出維度;那麼它會是Embedding(input_dim=4, output_dim=12, ...)