【问题标题】:Inputing 5 row data,classifiying(predicting) 6th row in Keras LSTM输入 5 行数据,在 Keras LSTM 中对第 6 行进行分类(预测)
【发布时间】:2018-06-12 07:53:40
【问题描述】:

我想将数据集的 5 行输入到LSTM 并对 Y 的第 6 行进行分类。我通过重塑数据进行输入:

X = X.reshape(6000,5,5)

但是如何预测第 6 行的 Y? Y应该有什么形状?我在谷歌上读了很多书,也搜索了很多,但老实说我无法理解代码,因为他们在使用它们之前会自定义数据。

我的完整代码:

import pandas as pd
from sklearn.preprocessing import LabelEncoder,MinMaxScaler
from keras.layers import Dense,RNN,LSTM,Activation,Dropout,SimpleRNN,Bidirectional
from keras.optimizers import RMSprop,Adam
from keras.wrappers.scikit_learn import KerasClassifier
from keras.models import Sequential
from sklearn.model_selection import train_test_split
import numpy as np

df = pd.read_csv('./EURUSD_DATAFRAME.csv')
BinEncoder = LabelEncoder()
scalar = MinMaxScaler()

df['pos'] = df['pos'].astype('int')
dat = df.values




X = dat[0:30000,0:5]
Y = dat[0:6000,5]


X[:,4]= BinEncoder.fit_transform(X[:,4])
X[:,0:4] = scalar.fit_transform(X[:,0:4])
X[:,4] = X[:,4].astype('int')
Y = BinEncoder.fit_transform(Y)

X = X.reshape(6000,5,5)
#MODEL 3
 model = Sequential()
 model.add(LSTM(1024,input_shape=(5,5),return_sequences=True,kernel_initializer='normal'))
 #model.add(Activation('tanh'))
 model.add(Dropout(0.2))
 model.add(LSTM(512))
 model.add(Dropout(0.3))
 model.add(Dense(1))
 model.add(Activation('sigmoid'))
 model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
 model.fit(X,Y,batch_size=100,epochs=10,validation_split=0.2)
 p = model.predict(X)
# print(classifier.score(X,Y))
# ----

我正在对编码为 1 或 0 的 Y 进行分类。

【问题讨论】:

    标签: python keras deep-learning recurrent-neural-network


    【解决方案1】:

    对不起,我真的不明白你的意思是什么?您的输入形状是 (6000, 5, 5),而您的输出形状是 (6000, 2)?那么第六排是什么意思?

    【讨论】:

    • 分类器获取5行数据作为输入,然后预测(分类)第6行标签。
    • 我想我明白了,您正在输入 5 个特征、行并期望模型预测第 6 行的标签。在这种情况下你不需要做任何事情,因为 nn 会找到你的输入 x 和标签 y 本身之间的映射,因为这就是它们的目的
    • 我很困惑,我怎么能从前 5 行预测第 6 行标签!!!非常感谢!!
    【解决方案2】:

    这很简单。使用内置的 keras 函数:这会将其转换为一种热表示,例如 [0, 1] 和 [1, 0]

     from keras.utils import to_categorical
    
     y = to_categorical(y, num_classes=2)
    

    并将最后一个密集层中的单元数更改为 num_classes,在您的情况下为 2。而且我认为您应该使用 softmax 而不是 sigmoid 进行分类。另外,我建议您在 lstm 层或更高级的 LeakyRelu 之间使用“relu”激活

    【讨论】:

    • 谢谢,我的一个问题解决了。以及如何输入 5 行作为输入,并预测第 6 行?
    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多