Как сделать прогноз временных рядов, используя LSTM для изображений? - PullRequest
2 голосов
/ 07 ноября 2019
  1. У меня есть 20 изображений для разных периодов времени
  2. После чтения их в виде массива у меня есть около 100000 пикселей, значения которых известны за 20 периодов времени, и я должен предсказать значение 21-го периода времени длякаждый пиксель использует LSTM.
  3. Я тренирую свою модель, используя X_train, который имеет 5 значений времени в качестве ввода, а Y_train принимает 6-е значение времени.

  4. Я хочу получить что-то вроде Y = [260], если в качестве входных данных я дал X = [500,450,390,350,300].

  5. У меня есть массив всех изображений, имеющих форму (100769,20)

Мой код выглядит следующим образом, пожалуйста, предложите что-нибудь.

Используемая библиотека

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from keras.backend import clear_session

создание обучающих данных за 5 лет

for c in range(100769):
    X=[]
    Y=[]
    for d in range (15):
        x=res_arr[c][d:d+5]
        X.append(x)
        y=res_arr[c][d+5]
        Y.append(y)

Использование Keras

Initialising the RNN
X_train=(1/6300)*(np.array(X))
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1],1))
Y=np.reshape(Y,(15,1))
Y_train=(1/6300)*(Y)

Инициализация RNN

regressor = Sequential()

Добавление первого слоя LSTM и некоторая регуляризация Dropout

regressor.add(LSTM(units = 30, return_sequences = True,activation='relu',input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))

Добавление второго слоя LSTMи некоторая регуляризация Dropout

regressor.add(LSTM(units = 30, activation='relu',return_sequences = True))
regressor.add(Dropout(0.2))

Добавление третьего слоя LSTM aи некоторая регуляризация Dropout

regressor.add(LSTM(units = 30,activation='relu', return_sequences = True))
regressor.add(Dropout(0.2))

Добавление четвертого слоя LSTM и некоторая регуляризация Dropout

regressor.add(LSTM(units = 30,activation='relu'))
regressor.add(Dropout(0.2))

Добавление выходного слоя

regressor.add(Dense(units = 1,activation='relu'))

Компиляция RNN

regressor.compile(optimizer = 'Adam', loss = 'mean_squared_error',metrics=['accuracy'])

Установка RNN в Учебный комплект

regressor.fit(X_train, Y_train)
_, accuracy = regressor.evaluate(X_train, Y_train)
#print('Accuracy: %.2f' % (accuracy*100))
acc.append(accuracy*100)

Краткое описание модели

regressor.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 5, 30)             3840      
_________________________________________________________________
dropout_1 (Dropout)          (None, 5, 30)             0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 5, 30)             7320      
_________________________________________________________________
dropout_2 (Dropout)          (None, 5, 30)             0         
_________________________________________________________________
lstm_3 (LSTM)                (None, 5, 30)             7320      
_________________________________________________________________
dropout_3 (Dropout)          (None, 5, 30)             0         
_________________________________________________________________
lstm_4 (LSTM)                (None, 30)                7320      
_________________________________________________________________
dropout_4 (Dropout)          (None, 30)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 31        
=================================================================
Total params: 25,831
Trainable params: 25,831
Non-trainable params: 0

1 Ответ

1 голос
/ 07 ноября 2019

Измените свой последний слой на

regressor.add(Dense(units = 1,activation='linear'))
...