какой должна быть форма целевых данных в LSTM для прогнозирования числа в последовательности - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю с функциональным API keras на LSTM. где a дали входную последовательность из 3 объектов и предсказали следующее значение в ней. например, для ввода

[10, 20, 30]

target

[40]

ниже приведены входные данные.

[[[10, 20, 30],
  [20, 30, 40],
  [30, 40, 50],
  [40, 50, 60],
  [50, 60, 70],
  [60, 70, 80],
  [70, 80, 90]]]

и целевые данные.

[ 40,  50,  60,  70,  80,  90, 100]

вот мой код для создания входного массива и целевого массива

from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers.recurrent import LSTM
from numpy import array
def own_split_sequence():
    X, y = list(), list()
    for i in range(10,100,10):
        if i+30 > 100:
            break
        seq_x = [i, i+10, i+20]
        seq_y = i+30
        X.append(seq_x)
        y.append(seq_y)
    return array(X), array(y)

изменить форму ввода в соответствии с (выборками, временными шагами, функциями)

x1 = X.reshape((1,7,3))

код модели.

visible = Input(shape=(7,3))
hidden1 = LSTM(10)(visible)
output = Dense(1,activation='relu')(hidden1)
model = Model(inputs=visible,outputs=output)
model.compile(optimizer='adam', loss='mse')
model.fit(x1, y, epochs=150, verbose=2)

и здесь в методе подгонки выдает ошибку

ValueError: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 7 target samples.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020
x1 = X.reshape((7,3,1))
visible = Input(shape=(3,1))
hidden1 = LSTM(10,activation='relu')(visible)
output = Dense(1,activation='relu')(hidden1)
model = Model(inputs=visible,outputs=output)

это сработало для меня

0 голосов
/ 16 апреля 2020

Ошибка в основном связана с входными и целевыми формами. Вы правы, указав, что входные данные должны быть изменены (сэмплы, временные шаги, функции). Но код ниже не отражает это. У вас есть 7 сэмплов, каждый из которых имеет 3 временных шага, с одной функцией для временного шага.

    x1 = X.reshape((7,3,1))

Также цель должна быть изменена, чтобы соответствовать той же схеме. Измерение временного шага будет сжато в цели.

    y = y.reshape((7,1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...