Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置LSTM网络?_Python_Lstm_Recurrent Neural Network - Fatal编程技术网

Python 如何设置LSTM网络?

Python 如何设置LSTM网络?,python,lstm,recurrent-neural-network,Python,Lstm,Recurrent Neural Network,我正在学习如何建立RNN-LSTM网络进行预测。我已经用一个变量创建了数据集 x y 1 2.5 2 6 3 8.6 4 11.2 5 13.8 6 16.4 ... 以及y(t)=2.5x(t)+x(t-1)-0.9*x(t-2)的关系。我正试图设置RNN-LSTM来学习模式,但我的程序出现了错误。我的程序如下: df=pd.read\u excel('dataset.xlsx') def split_数据集(数据): #分为标准周 列车,测试=数据[:-328],数据[-32

我正在学习如何建立RNN-LSTM网络进行预测。我已经用一个变量创建了数据集

x  y
1  2.5
2  6
3  8.6
4  11.2
5  13.8
6  16.4
...
以及
y(t)=2.5x(t)+x(t-1)-0.9*x(t-2)
的关系。我正试图设置RNN-LSTM来学习模式,但我的程序出现了错误。我的程序如下:

df=pd.read\u excel('dataset.xlsx')
def split_数据集(数据):
#分为标准周
列车,测试=数据[:-328],数据[-328:-6]
#重组为每周数据窗口
序列=np.数组(np.拆分(序列,长度(序列)/1))
测试=np.数组(np.拆分(测试,len(测试)/1))
回程列车
详细,年代,批次大小=0,20,16
列车,测试=分割数据集(df.值)
列车x,列车y=列车[:,:,0],列车[:,:,1]
模型=顺序()
添加模型(LSTM(200,返回序列=真,输入形状=序列形状))
compile(loss='mse',optimizer='adam')
出现
值错误

ValueError: Error when checking input: expected lstm_35_input to have 3 dimensions, but got array with shape (8766, 1)
任何有经验的DS或pythoner都可以教我如何建立网络


感谢基于LSTM的RNN,输入应为3维(批次、时间、数据点)。我假设
x
变量的索引是它的时间。在这种情况下,您必须将输入转换为某个窗口的批处理,例如3个窗口,那么您的输入是:

批处理#输入目标

0 x[0:3]y[3]

1 x[1:4]y[4]

2x[2:5]y[5]

注意:您的y从t=3开始,因为您使用最后3个时间步来预测下一个第4个值。如果您的y已经如您所说从最后三个时间步骤计算出来,那么y应该从0索引开始,即在批次0中,您的y[0]是目标

根据以下评论更新 如果您想要有多个序列,那么您可以将其建模为序列到序列问题,并且将是一个
N到M
映射,您需要五个x值来预测三个y:

批处理#输入目标

0 x[0:5]y[3:6]

1 x[1:6]y[4:7]


2 x[2:7]y[5:8]

在当前情况下,我已经创建了数据窗口,它看起来像是我提到的案例中的工作

下面是我的代码:

df=pd.read\u excel('dataset.xlsx')
#将单变量数据集拆分为训练集/测试集
def split_数据集(数据):
列车,测试=数据[:-328],数据[-328:-6]
回程列车
列车,测试=分割数据集(df.值)
#将列车和试验数据缩放至[-1,1]
def刻度(列,测试):
#配合定标器
scaler=MinMaxScaler(特征范围=(0,1))
定标器=定标器安装(列车)
#换乘列车
#train=train.reformate(train.shape[0],train.shape[1])
序列缩放=缩放变换(序列)
#变换测试
#test=test.reformate(test.shape[0],test.shape[1])
test_scaled=缩放器变换(test)
返回定标器、序列定标器、测试定标器
缩放器,序列缩放,测试缩放=缩放(序列,测试)
def to_受监控(列车,n_输入,n_输出=7):
#展平数据
数据=列车
十、 y=list(),list()
in_start=0
#一次一步地浏览整个历史记录
对于范围内的(len(data)):
#定义输入序列的结尾
输入端=输入端+输入端
输出端=输入端+n输出
#确保我们有足够的数据用于此实例

如果结果是可行的,那么如何预测多步呢?你能告诉我更多吗?我已经问了上面的问题。你说的多步骤是什么意思,你能详细说明一下吗?基于(x(t),x(t-1))来预测y(t),y(t+1)。。。或者更多,这意味着输出不仅仅是一个值。python中的代码如何?如何在pythonlstm设置中编写此代码?我上面的第二个回复显示了我的尝试和其他问题。你不应该在一个主题中创建两个帖子来问两个问题。你能接受并投票支持我的答案,然后再提出另一个问题吗?你的第一个问题已经回答,第二个问题需要另一个自己的线程。好的,创建另一个线程,然后给我发送一个链接,我将尝试回答它
train_x, train_y = to_supervised(train_scaled, n_input = 3, n_out = 2)
test_x, test_y =  to_supervised(test_scaled, n_input = 3, n_out = 2)

verbose, epochs, batch_size = 0, 20, 16
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]

model = Sequential()
model.add(LSTM(200, return_sequences= False, input_shape = (train_x.shape[1],train_x.shape[2])))
model.add(Dense(1))
model.compile(loss = 'mse', optimizer = 'adam')
history = model.fit(train_x, train_y, epochs=epochs, verbose=verbose, validation_data = (test_x, test_y))

ValueError: Error when checking target: expected dense_27 to have shape (1,) but got array with shape (2,)