多维LSTM的最简单示例

时间:2017-10-10 00:08:41

标签: python keras

我想创建一个简单的LSTM,它会尝试根据3个变量 open_price close_price volume 来预测股票价格。

  1. 我想预测open_price和close_price
  2. 我想预测未来5天的价格
  3. 我想根据前10天预测价格
  4. 我相信明天的价格会受到 今日价格 voulme
  5. 的影响

    我一直在玩这个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)
    

    所以我的单个样本是

    • 输入:一个序列(5个项目长),每个项目有4个功能
    • 输出:一个序列(5个项目长),每个项目有3个功能

    但是我无法更改输出序列长度(out_timesteps = 2)。我收到一个错误:

      

    ValueError:检查目标时出错:预期lstm_143有   形状(无,5,3)但有阵列形状(20,2,3)

    我认为是这样的:基于过去5天,预测接下来的2天。

    该错误该怎么办?

0 个答案:

没有答案