iT邦幫忙

1

【不是鐵人賽】Day 02|虛擬貨幣價格預測(二)LSTM與GRU。

友:你要不要一起參加鐵人賽?
我:好啊!
(幾天後)
我:乾我不小心忘了報名......
--------------------------------------> 2021.09.17


本系列的目標如下

  1. 陪我同事參賽,一起寫文。
  2. 帶大家使用不同的模型來預測漲跌。
  3. 帶大家使用不同的特徵來預測漲跌。
  4. 總目標是發大財。

今天來帶大家跑個模型吧!

今天會使用的的模型是常見的LSTM及GRU。一樣的是,網路上有許多優質的解說文章,大家可以先去做點功課。

Step 0. 昨天準備好的資料

  • 我們昨天準備好我們的資料囉!
train_data     # (2984, 7, 4)
train_label    # (2984, )

Step 1. 建立我們的模型

  • LSTM
lstm_model = K.Sequential()
lstm_model.add(K.layers.LSTM(units=256, return_sequences=True, input_shape=(7, 4)))
lstm_model.add(K.layers.Dropout(0.3214))
lstm_model.add(K.layers.LSTM(units=64))
lstm_model.add(K.layers.Dropout(0.1432))
lstm_model.add(K.layers.Dense(units=1, activation='sigmoid'))
lstm_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  • GRU
gru_model = K.Sequential()
gru_model.add(K.layers.GRU(units=256, return_sequences=True, input_shape=(7, 4)))
gru_model.add(K.layers.Dropout(0.3214))
gru_model.add(K.layers.GRU(units=64))
gru_model.add(K.layers.Dropout(0.1432))
gru_model.add(K.layers.Dense(units=1, activation='sigmoid'))
gru_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Step 2. 切割訓練資料,八成做訓練,兩成做測試。

train_data = np.array(train_data)
train_label = np.array(train_label)
split_num = int(len(train_data)*0.8)
train_data, test_data = train_data[:split_num], train_data[split_num:]
train_label, test_label = train_label[:split_num], train_label[split_num:]

Step 3. 訓練模型及評估模型

lstm_model.fit(train_data, train_label, validation_split=0.14, epochs=50, batch_size=64, verbose=0)
gru_model.fit(train_data, train_label, validation_split=0.14, epochs=50, batch_size=64, verbose=0)
lstm_pred = lstm_model.evaluate(test_data, test_label)
gru_pred = gru_model.evaluate(test_data, test_label)

小結

  • 到目前為止,這些程式都是大家可以從網路上找到的資源。相信只要是資訊或是電機相關科系或產業的人士,都有能力可以自己從網路上找到這些資源,訓練出自己的模型。
  • 其實各家的AI模型,端看各自的訓練資料長什麼樣子,神經網路的設計(幾層,幾個unit,優化器選哪個,損失函數用哪個)。
  • 這次我們訓練好的模型是一個分類模型,幫我們分類訓練資料的結果是1還是0,aka漲或是跌。明天會來分享如何訓練一個回歸模型,預測出可能的價格數值。

尚未有邦友留言

立即登入留言