iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 15
0

Introduction

長短期記憶(Long Short-Term Memory, LSTM)適用於多變數或多輸入的預測問題,常用於時間序列預測。

Tasks

學習資源:
cntk/Tutorials/CNTK_106A_LSTM_Timeseries_with_Simulated_Data.ipynb
使用 LSTM 模型來進行時間序列預測,對正弦函數資料集預測。

y=sin(t)

1.資料讀取(Data reading):

宣告函式:split_data 將資料集分成訓練資料集、驗證資料集和測試資料集。

def split_data(data, val_size=0.1, test_size=0.1):
    """
    splits np.array into training, validation and test
    """
    pos_test = int(len(data) * (1 - test_size))
    pos_val = int(len(data[:pos_test]) * (1 - val_size))

    train, val, test = data[:pos_val], data[pos_val:pos_test], data[pos_test:]

    return {"train": train, "val": val, "test": test}

宣告函式:generate_data 產生資料,輸入 N 個連續的資料,預測 M 回合之後的資料。

def generate_data(fct, x, time_steps, time_shift):
  
    # 產生序列資料
    data = fct(x)
    
    if not isinstance(data, pd.DataFrame):
        data = pd.DataFrame(dict(a = data[0:len(data) - time_shift],
                                 b = data[time_shift:]))
    rnn_x = []
    for i in range(len(data) - time_steps + 1):
        rnn_x.append(data['a'].iloc[i: i + time_steps].as_matrix())
    rnn_x = np.array(rnn_x)

    # 重新組合排序資料以相容 LSTM 模型
    rnn_x = rnn_x.reshape(rnn_x.shape + (1,))
    
    rnn_y = data['b'].values
    rnn_y = rnn_y[time_steps - 1 :]
    
    # 重新組合排序資料以相容 LSTM 模型
    rnn_y = rnn_y.reshape(rnn_y.shape + (1,))

    return split_data(rnn_x), split_data(rnn_y)

產生資料

N = 5 # input: N subsequent values 
M = 5 # output: predict 1 value M steps ahead
X, Y = generate_data(np.sin, np.linspace(0, 100, 10000, dtype=np.float32), N, M)

f, a = plt.subplots(3, 1, figsize=(12, 8))
for j, ds in enumerate(["train", "val", "test"]):
    a[j].plot(Y[ds], label=ds + ' raw');
[i.legend() for i in a];

上一篇
自動編碼器
下一篇
CNTK 訓練步驟整理
系列文
探索 Microsoft CNTK 機器學習工具30

尚未有邦友留言

立即登入留言