keras中的LSTM实现使用特定数据集

时间:2016-10-06 09:49:33

标签: python neural-network theano keras

我试图了解LSTM RNN如何工作以及如何在Keras中实现它们以便能够解决二进制分类问题。我使用的代码和数据集如下所示。当我编译代码时出现错误TypeError: __init__() got multiple values for keyword argument 'input_dim',有人可以帮忙吗?

   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

2 个答案:

答案 0 :(得分:0)

这里看起来像两个单独的问题。

关于如何使用LSTM / Keras,有一些很好的教程。尝试this one,它也描述了二进制分类问题。如果您有特定的问题或领域,您不明白,请告诉我。

关于文件打开问题,文件名中的空格可能会导致问题。查看this answer以查看是否有帮助。

答案 1 :(得分: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, ...)