LSTM _我可以划分一个序列以获得更多序列吗?

时间:2019-05-29 09:56:46

标签: python sequence lstm

我有14个序列,其中包含72个时间步长和11个功能。其中6个分类为“ 0”,其中8个分类为“ 1”。 我想训练一个能够将新序列分类为“ 1”或“ 0”的LSTM。

我有个主意:每隔一个时间步就将序列数加倍。我不知道这是否可行,但是随着时间的推移,我认为它可行。

问题是我不知道是否可以“允许”这样做以及对LSTM准确性的影响。

只知道时间步长是其中一个功能,另一个是我在上一步中计算出的统计信息。这是我的代码:

##------------------CONSTANTS----------------------------
timesteps=72 
n_series=14   #number of sequences

##------------------READ DATASET-------------------------
df = pd.read_excel (r'E:\Istem\Deux\Split12.xlsx',nrows=n_series*timesteps) 

X=np.asarray([df.iloc[72*i:72*(i+1),[1,5,6,7,8,9,11,12,13,14,15]].values for i in range(split*n_series)])
Y=[0,1,0,0,0,0,0,1,1,1,1,1,1,1]


#------------------DIVIDE SEQUENCE----------------------
div=2
newX=np.asarray([X[i][j::div] for j in range(div) for i in range(len(X))])
newY=np.repeat(Y,div)

X_train, X_test, y_train, y_test = sk.train_test_split(newX,newY,test_size=0.1)


#------------------CREATE MODEL-------------------------
model = Sequential()
model.add(LSTM(100, input_shape=(int(timesteps/div),11), return_sequences=False))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_train, y_train, epochs=4, batch_size=8, validation_split=0.2, verbose=1)


#------------------EVALUATE MODEL-----------------------
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))

目前,我的准确度在50%到60%之间。我试图更改批处理大小,时代数,LSTM大小,时间步划分数……但是并没有太大变化。 更令人担忧的是,如果我在训练集上评估我的模型,准确性不会更好,所以肯定存在错误。

这是我尝试实施的第一个LSTM,因此,如果您能帮助我,我将不胜感激。

0 个答案:

没有答案