我是 RNN 和 keras 的新手。
我正在尝试在顺序数据(不一定是时间序列,而是按顺序)上比较 LSTM 与传统机器学习算法(如 RF 或 GBM)的性能。我的数据包含 276 个预测变量和一个输出(例如,具有 276 个股票公司各种信息的股票价格)和 8564 个追溯观察。由于 LSTM 在捕捉顺序趋势方面非常出色,我决定使用 300 的 time_step。从下图中,我相信我的任务是创建一个多对多网络(左起最后一个图)。(图片: http: //karpathy.github.io/2015/05/21/rnn-effectiveness/)
每个粉色盒子的大小为 276(预测变量数)和 300(time_steps)这样的粉色盒子在一批中。但是,我很难看到我如何在这里设计蓝色盒子,因为每个蓝色盒子都应该是输出(股票价格) 每个实例。从 Keras gihub 论坛#2403和#2654上的其他帖子来看,我想我必须实现 TimeDistributed(Dense()) 但我不知道如何。这是我检查它是否有效的代码(train_idv 是要预测的数据,train_dv 是股票价格)
train_idv.shape
#(8263, 300, 276)
train_dv.shape
#(8263, 300, 1)
batch_size = 1
time_Steps=300
model = Sequential()
model.add(LSTM(300,
batch_input_shape=(batch_size, time_Steps, train_idv.shape[2]),
stateful=True,
return_sequences=True))
model.add(Dropout(0.3))
model.add(TimeDistributed(Dense(300)))
# Model Compilation
model.compile(loss='mean_squared_error',optimizer='adam',metrics=['accuracy'])
model.fit(train_idv, traindv, nb_epoch=1, batch_size=batch_size, verbose=2, shuffle=False)
运行 model.fit 会出现此错误
回溯(最后一次调用):文件“”,第 1 行,在文件“/home/user/.local/lib/python2.7/site-packages/keras/models.py”中,第 627 行,适合 sample_weight= sample_weight)文件“/home/user/.local/lib/python2.7/site-packages/keras/engine/training.py”,第 1052 行,适合 batch_size=batch_size)文件“/home/user/.local/ lib/python2.7/site-packages/keras/engine/training.py”,第 983 行,在 _standardize_user_data exception_prefix='model target') 文件“/home/user/.local/lib/python2.7/site-packages /keras/engine/training.py",第 111 行,在 standardize_input_data str(array.shape)) 异常:检查模型目标时出错:预期 timedistributed_4 的形状为 (1, 300, 300) 但得到的数组的形状为 (8263, 300, 1)
现在,我已经成功地使用 time_step=1 运行它,并且只使用 Dense(1) 作为最后一层。但我不确定我应该如何塑造我的 train_dv(训练中的输出)或如何正确使用 TimeDistributed(Dense())。最后,我想使用
trainPredict = model.predict(train_idv,batch_size=1)
预测任何数据的分数。
我也在keras github 论坛上发布了这个问题。