File size: 1,404 Bytes
012eb9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import GRU, Bidirectional, Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.regularizers import L2
import tensorflow as tf

def model_train (x_train, y_train):
  tf.random.set_seed(100)
  tf.keras.backend.clear_session()

  model = Sequential()
  model.add(Bidirectional(GRU(units=256, activation='relu', return_sequences=True, input_shape=(10,1))))
  model.add(Dropout(0.5))
  model.add(Bidirectional(GRU(units=256, activation='relu', return_sequences=False, kernel_regularizer=L2(0.01))))
  model.add(Dropout(0.1))
  model.add(Dense(units=1, activation='linear')) # Prediction of the next value

  model.compile(optimizer='adam', loss='mape', metrics='mape')

  model.build((None, 10, 1))  # Specify input shape

  # Define EarlyStopping callback
  early_stopping = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)

  # Train the model
  history = model.fit(x_train, y_train, epochs=10, batch_size=20, validation_split=0.2, callbacks=[early_stopping])
  return history, model

def model_predict(train,scaler,model):
  data_inf = train[-10:]
  scaled_data_inf = scaler.transform(data_inf.values.reshape(-1,1))
  data_inf_final = tf.expand_dims(scaled_data_inf,0)
  pred_inf = model.predict(data_inf_final)
  return scaler.inverse_transform(pred_inf) , data_inf