Search code examples
kerasdeep-learninglstmrecurrent-neural-networkprediction

LSTM Prediction with Low Accuracy


I used an LSTM model for this prediction. But the accuracy is very low. How could I fix this issue?

from keras.layers import Dropout
from keras.layers import Bidirectional
model=Sequential()
model.add(LSTM(50,activation='relu',return_sequences=True,input_shape=(look_back,1)))
model.add(LSTM(50, activation='relu', return_sequences=True))
model.add(LSTM(50, activation='relu', return_sequences=True))
model.add(LSTM(50, activation='sigmoid', return_sequences=False))
model.add(Dense(50))
model.add(Dense(50))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy'])
model.optimizer.learning_rate = 0.0001

Test and Train Prediction Plot

Epochs


Solution

  • your structure seems correct. try my code.

    from keras.models import Sequential from keras.layers import LSTM, Dense,Dropout, Bidirectional

    import numpy as np
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    #from keras.utils import plot_model
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import MinMaxScaler
    from keras.layers.merge import Concatenate
    import matplotlib.gridspec as gridspec
    
    import random
    import scikitplot as skplot
    import datetime
    from datetime import date
    from pandas_datareader import data as pdr
    
    def create_dataset(dataset, look_back=3):
        dataX, dataY = [], []
        for i in range(len(dataset)-look_back-1):
            a = dataset[i:(i+look_back)]
            dataX.append(a)
            dataY.append(dataset[i + look_back])
        return np.array(dataX), np.array(dataY)
    
    COLUMNS=['your_data_column']
    dataset=df[COLUMNS]
    scaler = MinMaxScaler(feature_range=(0, 1))
    dataset = scaler.fit_transform(np.array(dataset).reshape(-1,1))
    
    train_size = int(len(dataset) * 0.60)
    test_size = len(dataset) - train_size
    train, test = dataset[0:train_size], dataset[train_size:len(dataset)]
    
    look_back=3
    trainX=[]
    testX=[]
    y_train=[]
    n_future = 1
    features=2
    timeSteps=4
    
    model = Sequential()
    
    model.add(Bidirectional(LSTM(units=50, return_sequences=True, 
                                 input_shape=(X_train.shape[1], 1))))
    
    model.add(LSTM(units= 50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units= 50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units= 50))
    model.add(Dropout(0.2))
    model.add(Dense(units = n_future))
    
    model.compile(optimizer="adam", loss="mean_squared_error", metrics=["acc"])