我想创建一个简单的LSTM,它会尝试根据3个变量 open_price , close_price 和 volume 来预测股票价格。
我一直在玩这个example,它只使用一个变量(价格)。但我无法弄清楚如何使它与多个变量一起使用。
请记住,虽然我只是预测过去的价格,但我仍然希望我的网络使用过去的数量数据,因为它可能带有一些有关价格变化的信息。
以下是我使用一些随机值的代码:
from keras.layers.recurrent import LSTM
from keras.models import Sequential
import numpy as np
my_input_dim = ???
my_output_dim = ???
model = Sequential()
model.add(LSTM(
input_dim=my_input_dim,
output_dim=my_output_dim,
return_sequences=True))
model.compile(loss='mse', optimizer='adam')
rows = 100
# index 0: open_price, index 1: close_price, index 2: volume
dataset = np.random.rand(rows,3)
my_x_train = ???
my_y_train = ???
model.fit(
my_x_train,
my_y_train,
batch_size=1,
nb_epoch=10,
validation_split=0.20)
data_from_5_previous_days = np.random.rand(5,3)
# should be a 2D array of lenght 5 (prices for the next 5 days)
prediction = model.predict(data_from_5_previous_days)
你能帮我完成吗?
修改
我想我在这里取得了一些进展:
timesteps = 5
out_timesteps = 5
input_features = 4
output_features = 3
xs = np.arange(20 * timesteps * input_features).reshape((20,timesteps,input_features)) # (20,5,4)
ys = np.arange(20 * out_timesteps * output_features).reshape((20,out_timesteps,output_features)) # (20,5,3)
model = Sequential()
model.add(LSTM(13, input_shape=(timesteps, input_features), return_sequences=True))
model.add(LSTM(17, return_sequences=True))
model.add(LSTM(output_features, return_sequences=True)) # output_features (output dim) needs to be the same length as the length of a sample from ys (int the LAST layer)
model.compile(loss='mse', optimizer='adam')
model.fit(xs,ys,batch_size=1,nb_epoch=1,validation_split=0.20)
prediction = model.predict(xs[0:2]) # (20,5,3)
所以我的单个样本是
但是我无法更改输出序列长度(out_timesteps = 2
)。我收到一个错误:
ValueError:检查目标时出错:预期lstm_143有 形状(无,5,3)但有阵列形状(20,2,3)
我认为是这样的:基于过去5天,预测接下来的2天。
该错误该怎么办?