Arrays 如何为LSTM塑造双要素输入数据

Arrays 如何为LSTM塑造双要素输入数据,arrays,machine-learning,multidimensional-array,keras,lstm,Arrays,Machine Learning,Multidimensional Array,Keras,Lstm,我在Keras中使用带有LSTM节点的RNN进行时间序列预测。我有两个输入特性和一个输出特性,我使用的滑动窗口大小为4,步长为1 因此,我试图为LSTM处理数据准备相应的数组。然而,这些维度似乎并不正确。我已经得到了一个点,我得到了正确形状的3D阵列,网络可以接收它,但是在阵列中设置数据的方式在我看来并不正确 因此,仅查看培训数据,这是文件中的原始数据: train_input=df[['a','b']]值(这是形状(354,2)) 列车输出=df['c']]。数值(这是形状(354,1))

我在Keras中使用带有LSTM节点的RNN进行时间序列预测。我有两个输入特性和一个输出特性,我使用的滑动窗口大小为4,步长为1

因此,我试图为LSTM处理数据准备相应的数组。然而,这些维度似乎并不正确。我已经得到了一个点,我得到了正确形状的3D阵列,网络可以接收它,但是在阵列中设置数据的方式在我看来并不正确

因此,仅查看培训数据,这是文件中的原始数据:

train_input=df[['a','b']]值(这是形状(354,2))
列车输出=df['c']]。数值(这是形状(354,1))
接下来我缩放数据,之后形状仍然保持不变。然后我想使用一个循环,以便将数据引入滑动窗口形状(窗口大小4,范围354):

列车输入窗口=[]
列车输出窗口=[]
对于范围内的i(4354):
列车输入窗口。追加(列车输入缩放[i-4:i,0])
列车输入窗口。追加(列车输入缩放[i-4:i,1])
列输出窗口。追加(列输出缩放[i,0])
列车输入窗口=np.数组(列车输入窗口)
列输出窗口=np.数组(列输出窗口)
现在列车输入窗口的形状为(700,4) 列车输出窗口的形状为(350,)

我想这就是问题所在。因为我可以将数据重塑为一个3D阵列,这样可以工作:

train\u input3D=np.重塑(train\u input\u窗口,(350,4,2))
列输出3D=np.整形(列输出窗口,(350,1,1))
但我只是不认为数组中的数据排列正确。 培训输入如下所示:

打印(列车输入3D)
[a]
[答]
[乙]
[b]]
[a]
[答]
[乙]
[b]]。。。。。
难道不是吗

[[a b]
[甲、乙]
[甲、乙]
[a b]]
[[a b]
[甲、乙]
[甲、乙]
[a b]。。。。。
我尝试了很多不同的东西,现在我很困惑,我只是希望我不会因为试图解释而把这里的每个人都弄糊涂

那么,我认为数组中的输入形状是否适合我的尝试?如果是,我该如何安排它? 这是我的完整代码:

#读取数据
df=pd.ExcelFile('GPT.xlsx').parse('7Avg'))
#训练数据
列车输入=df['Precip_7Sum','Temp_7Avg'].值#
列车输出=df['GWL\U 7Avg'].值
#测试数据
测试输入=df['Precip_7SumT','Temp_7AvgT'].值#
测试输出=df['GWL\U 7AvgT']]。数值
#标准化/缩放数据
输入\u scaler=MinMaxScaler(特征\u范围=(0,1))
输出_scaler=MinMaxScaler(特征_范围=(0,1))
训练输入缩放=输入缩放器。拟合变换(训练输入)
列输出缩放=输出缩放器。拟合变换(列输出)
test\u input\u scaled=输入\u scaler.transform(test\u input)
test\u output\u scaled=输出\u scaler.transform(test\u output)
#将数据转换为滑动窗口格式
列车输入窗口=[]
列车输出窗口=[]
对于范围内的i(4354):
列车输入窗口。追加(列车输入缩放[i-4:i,0])
列车输入窗口。追加(列车输入缩放[i-4:i,1])
列输出窗口。追加(列输出缩放[i,0])
列车输入窗口=np.数组(列车输入窗口)
列输出窗口=np.数组(列输出窗口)
测试输入窗口=[]
测试输出窗口=[]
对于范围内的i(4354):
测试输入窗口。追加(列输入缩放[i-4:i,0])
测试输入窗口。追加(列输入缩放[i-4:i,1])
测试输出窗口。追加(列输出缩放[i,0])
测试输入窗口=np.数组(测试输入窗口)
测试输出窗口=np.数组(测试输出窗口)
#将数据转换为三维格式
train_input3D=np.重塑(train_input_window,(350,train_input_window.shape[1],2))#带形状的3D张量(批量大小、时间步长、输入维度)/(样本数、时间步长数、特征数)
列输出3D=np.整形(列输出窗口,(350,1,1))#
test_input3D=np.重塑(test_input_window,(350,test_input_window.shape[1],2))
#实例化模型类
模型=顺序()
#添加LSTM层
add(LSTM(units=1,return\u sequences=True,input\u shape=(4,2)))
#添加衰减层以避免过度拟合
模型。添加(辍学(0.2))
#再添加三个LSTM和辍学者
model.add(LSTM(单位=1,返回序列=True))
模型。添加(辍学(0.2))
model.add(LSTM(单位=1,返回序列=True))
模型。添加(辍学(0.2))
model.add(LSTM(单位=1,返回序列=True))
模型。添加(辍学(0.2))
#在模型末尾创建密集层,以使模型更加健壮
添加(密集(单位=1,输出形状=(4,1)))
#编译模型
compile(优化器='adam',loss='mean_squared_error')
#训练
模型拟合(序列输入3D,序列输出窗口,历元=100,批量大小=4)
#测试/预测
列车预测=模型预测(列车输入3D)
测试预测=模型预测(测试输入3D)
#输出数据的数据反向缩放
列车预测=输入定标器逆变换(列车预测)
测试预测=输入定标器。逆变换(测试预测)
原始数据=列车输出。附加(测试输出)
我希望我能把我的问题讲清楚,希望有人能帮我读到所有这些:D