سلام و ارادت
من با الهام گرفتن از الگوریتم seq2seq که شما برای ساخت یک ترجمه گر هوشمند پیاده سازی کردید یک مدل seq2seq برای پیش بینی بازارهای مالی نوشتم میخواستم شما بررسی بفرمایید ببینید درست هست یا خیر؟ البته من با دو لایه ال اس تی ام و سه لایه دنس مدل را ساختممن که تست گرفتم 2 عدد اول سکوئنسی که پیش بینی میشود خیلی با اعداد واقعی اختلاف دارد این کدهای من است:
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, LSTM, Dense
import numpy as np
import pytse_client as tse
import os
import streamlit as st
import pandas as pd
# In[4]:
# خواندن فایل دیتاست
data = pd.read_csv('tickers_data/out.csv')
# In[5]:
# ساخت دیتاست مناسب برای مدل سکوئنس تو سکوئنس
X = []
y = []
for i in range(len(data)-30-60+1):
X.append(data['close'][i:60 + i])
y.append(data['close'][i + 60:60 + 30 + i])
X = np.array(X)
y = np.array(y)
# In[6]:
X.shape
# In[7]:
X_train_for_test = X[:-1]
y_train_for_test = y[:-1]
# In[8]:
X_test = X[-1]
X_test.shape
# In[9]:
X_train_for_test.shape
# In[10]:
encoder_input_data = X_train_for_test.reshape(X_train_for_test.shape[0], 60, 1)
decoder_input_data = y_train_for_test.reshape(X_train_for_test.shape[0], 30, 1)
decoder_target_data = y_train_for_test.reshape(X_train_for_test.shape[0], 30, 1)
# In[9]:
encoder_input_data.shape
# In[13]:
# پارامترهای مدل
input_timesteps = 60 # تعداد سکوئنس ورودی
output_timesteps = 30 # تعداد سکوئنس خروجی
num_features = 1 # تعداد ویژگیها (مثلاً قیمت یک سهم)
# 5. دادههای نمونه
X_encoder = encoder_input_data # دادههای ورودی انکودر
X_decoder = decoder_input_data # دادههای ورودی دیکودر
Y_decoder = decoder_target_data # دادههای هدف دیکودر
# In[16]:
X_decoder.shape
# In[17]:
# 1. ساخت لایههای انکودر LSTM
encoder_inputs = Input(shape=(None, num_features), name="encoder_inputs")
# اولین LSTM انکودر
encoder_lstm1 = LSTM(256, return_sequences=True, return_state=True, name="encoder_lstm1")
encoder_outputs1, state_h1, state_c1 = encoder_lstm1(encoder_inputs)
# دومین LSTM انکودر
encoder_lstm2 = LSTM(256, return_state=True, name="encoder_lstm2")
encoder_outputs2, state_h2, state_c2 = encoder_lstm2(encoder_outputs1)
# ذخیره حالتهای انکودر برای دیکودر
encoder_states = [state_h2, state_c2]
# In[15]:
# 2. ساخت لایههای دیکودر LSTM و Dense
decoder_inputs = Input(shape=(None, num_features), name="decoder_inputs")
# اولین LSTM دیکودر (
decoder_lstm1 = LSTM(256, return_sequences=True, return_state=True, name="decoder_lstm1")
decoder_outputs1, _, _ = decoder_lstm1(decoder_inputs, initial_state=encoder_states)
# دومین LSTM دیکودر
decoder_lstm2 = LSTM(256, return_sequences=True, return_state=True, name="decoder_lstm2")
decoder_outputs2, _, _ = decoder_lstm2(decoder_outputs1)
# اضافه کردن لایه Dense
decoder_dense1 = Dense(128, activation="relu", name="decoder_dense1")
decoder_dense2 = Dense(64, activation="relu", name="decoder_dense2")
decoder_dense3 = Dense(num_features, activation="linear", name="decoder_dense3")
decoder_outputs = decoder_dense1(decoder_outputs2)
decoder_outputs = decoder_dense2(decoder_outputs)
decoder_outputs = decoder_dense3(decoder_outputs)
# In[16]:
# 3. ساخت مدل Seq2Seq
seq2seq_model = Model([encoder_inputs, decoder_inputs], decoder_outputs, name="seq2seq_model")
# In[27]:
# 4. کامپایل مدل
seq2seq_model.compile(optimizer="adam", loss="mae")
seq2seq_model.summary()
# In[28]:
# 6. آموزش مدل
seq2seq_model.fit([X_encoder, X_decoder], Y_decoder, epochs=20, batch_size=32, validation_split = 0.2)
# In[29]:
# 7. پیشبینی
# انکودر پیشبینی
encoder_model = Model(encoder_inputs, encoder_states)
# In[30]:
# دیکودر پیشبینی
decoder_state_input_h = Input(shape=(256,), name="decoder_state_h")
decoder_state_input_c = Input(shape=(256,), name="decoder_state_c")
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
decoder_lstm1_outputs, state_h1, state_c1 = decoder_lstm1(
decoder_inputs, initial_state=decoder_states_inputs
)
decoder_lstm2_outputs, state_h2, state_c2 = decoder_lstm2(
decoder_lstm1_outputs, initial_state=[state_h1, state_c1]
)
decoder_states = [state_h2, state_c2]
decoder_dense_outputs1 = decoder_dense1(decoder_lstm2_outputs)
decoder_dense_outputs2 = decoder_dense2(decoder_dense_outputs1)
decoder_outputs = decoder_dense3(decoder_dense_outputs2)
decoder_model = Model(
[decoder_inputs] + decoder_states_inputs, [decoder_outputs] + decoder_states
)
# In[31]:
# 8. پیشبینی سکوئنس جدید
def predict_sequence(input_seq, output_timesteps, encoder_model, decoder_model):
states = encoder_model.predict(input_seq)
target_seq = np.zeros((1, 1, num_features))
output_seq = []
for _ in range(output_timesteps):
output_tokens, h, c = decoder_model.predict([target_seq] + states)
output_seq.append(output_tokens[0, 0, 0])
target_seq = output_tokens[:, -1:, :]
states = [h, c]
return np.array(output_seq)
# In[34]:
# آزمایش مدل با داده نمونه
test_input = X_encoder[-2:-1]
predicted_sequence = predict_sequence(test_input, output_timesteps, encoder_model, decoder_model)
print
print(predicted_sequence