我正在训练一个预测加密货币价格的神经网络,但是数据丢失太大,代码如下:
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models,Sequential,Model,Input
from tensorflow.keras.optimizers import Adam
from sklearn.preprocessing import *
import matplotlib.pyplot as plt
import ccxt
import pandas as pd
import requests
import json
import datetime as dt
import time
# Определение входов
input1 = Input(shape=(100, 1))
input2 = Input(shape=(100, 1))
# Создание LSTM слоев для каждого входа
lstm1 = layers.LSTM(units=256, return_sequences=True, activation='sigmoid')(input1)
lstm1 = layers.LSTM(units=128, return_sequences=True, activation='tanh')(lstm1)
lstm1 = layers.LSTM(units=64, activation='linear')(lstm1)
lstm1 = layers.Dropout(0.2)(lstm1)
lstm2 = layers.LSTM(units=256, return_sequences=True, activation='sigmoid')(input2)
lstm2 = layers.LSTM(units=128, return_sequences=True, activation='tanh')(lstm2)
lstm2 = layers.LSTM(units=64, activation='linear')(lstm2)
lstm2 = layers.Dropout(0.2)(lstm2)
# Объединяем все LSTM выходы
merged = layers.concatenate([lstm1, lstm2])
# Добавляем Dense слой для объединенного выхода
output = layers.Dense(100, activation='linear')(merged)
# Создание и компиляция модели
model = Model(inputs=[input1, input2], outputs=output)
optimizer = Adam(learning_rate=0.000005)
model.compile(loss='mse', optimizer=optimizer)
df = pd.read_csv("/content/drive/MyDrive/traiding_bot/futures_nn_pred/btcdata15m.csv", sep ="\t")
list_of_close = df['Open'].to_list()
print(len(list_of_close))
df1 = pd.read_csv("/content/drive/MyDrive/traiding_bot/futures_nn_pred/btcoi15m.csv", sep ="\t")
list_of_oi = df1['openInterest'].to_list()
print(len(list_of_oi))
df3 = pd.read_csv("/content/drive/MyDrive/traiding_bot/futures_nn_pred/y.csv", sep ="\t")
y = df3['Close'].to_list()
print(len(y))
x1 = np.array(list_of_close).reshape(100,100)
x2 = np.array(list_of_oi).reshape(100,100)
min_max_scaler = MinMaxScaler()
x1 = min_max_scaler.fit_transform(x1)
x2 = min_max_scaler.fit_transform(x2)
x1 = x1.astype(float)
x2 = x2.astype(float)
y = np.array(y).reshape(100,100).astype(float)
# Обучение модели
history = model.fit([x1,x2], y,batch_size=64, epochs=100)
最后一次损失是:3848644352.0000
我的数据集包含 10,000 个收盘蜡烛和 10,000 个未平仓合约值
如何才能将损失降到最低?
学习率可能会非常低而无法收敛,请尝试 0.001 到 0.0001 之间的值。您也可以尝试双向 LSTM 层,它在金融时间序列中效果更好。
无论如何,误差非常高。我不知道您使用的是什么货币,但 RMSE 约为 62000,这在预测中可能是可靠的 100% 错误。这种差异不太可能是由于超参数固定造成的。您是否也在标准化输出?您也可以使用 MinMaxScaler() 来完成此操作,就像处理输入一样。
希望有帮助!