【问题标题】:How to use RNN to predict the next 4 timetsteps using 6 timesteps如何使用 RNN 使用 6 个时间步来预测接下来的 4 个时间步
【发布时间】:2020-04-17 15:28:42
【问题描述】:

我得到了一个包含 6 个数据点 +4 个数据点作为标签的数据集,他们要求使用 6 个数据步来预测这 4 个时间步。

你能告诉我什么模型以及我应该如何使用它,我认为某种 RNN 是因为每个点都有时间。

谢谢!

【问题讨论】:

    标签: deep-learning lstm recurrent-neural-network


    【解决方案1】:

    这类预测依赖于先前输入的问题通常使用 RNN 网络(rnn、gru 和 lstm),因为它们保留了先前的状态信息。 为了更深入的了解: https://colah.github.io/posts/2015-08-Understanding-LSTMs/

    请仔细阅读我在代码中编写的cmets。

    from __future__ import absolute_import, division, print_function, unicode_literals
    import tensorflow as tf
    from tensorflow.keras import Model
    import numpy as np
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.layers import RNN, LSTM
    
    """
    creating a toy dataset
    lets use this below ```input_sequence``` as the sequence to make data points.
    as per the question, we will use 6 points to predict next 4 points
    """
    input_sequence = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10]
    
    X_train = []
    y_train = []
    
    #first 6 points will be our input data points and next 4 points will be data label.
    # so on we will shift by 1 and make such data points and label pairs
    
    for i in range(len(input_sequence)-9):
        X_train.append(input_sequence[i:i+6])
        y_train.append(input_sequence[i+6:i+10])
    
    X_train = np.array(X_train, dtype=np.float32)
    y_train = np.array(y_train, dtype=np.int32)))
    #X_test for the predictions (contains 6 points)
    X_test = np.array([[8,9,10,1,2,3]],dtype=np.float32)
    print(X_train.shape)
    print(y_train.shape)
    print(X_test.shape)
    
    #we will be using basic LSTM, which accepts input in ```[num_inputs, time_steps, data_points], therefore reshaping as per that``` 
    X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
    X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
    print(X_train.shape)
    print(y_train.shape)
    print(X_test.shape)
    
    x_points = X_train.shape[-1]
    print("one input contains {} points".format(x_points))
    
    model = Sequential()
    model.add(LSTM(4, input_shape=(1, x_points)))
    model.add(Dense(4))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.summary()
    
    model.fit(X_train, y_train, epochs=500, batch_size=5, verbose=2)
    output = list(map(np.ceil, model.predict(X_test)))
    print(output)
    

    我们使用了更简单的模型,可以进一步改进以获得更好的结果。

    【讨论】:

      猜你喜欢
      • 2020-02-28
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2020-06-01
      相关资源
      最近更新 更多