Я пытаюсь построить нейронную сеть с LSTM в качестве первого скрытого слоя с библиотекой Keras (бэкэнд тензорного потока). У меня проблема с пониманием того, как изменить форму моих данных и передать их в LSTM с сохранением состояния с параметром batch_input_size.
Мой ввод - это 100-секундный временной ряд, выбранный на частоте 10 кГц. В общем, у меня есть 100 * 10000 разных значений времени. У меня есть выборка 3 разных наблюдаемых, поэтому количество функций равно 3. Назовем X входной матрицей с формой:
np.shape(X) = (1000000,1,3)
Моя цель имеет одно значение на каждый момент времени -> 100 * 10000 значений:
np.shape(Y) = (1000000,1,1)
Я хочу, чтобы моя модель выполнялась по одной секунде за раз и поэтому предсказывала 10000 целевых значений. Я полагаю, это должен быть размер партии. целевые значения Скажем, я хочу разместить 32 узла в слое LSTM, вот что я написал:
model_LSTM = Sequential()
model_LSTM.add(LSTM(32, stateful=True, batch_input_shape=(10000,1,3)))
model_LSTM.compile(optimizer=keras.optimizers.Adam(lr=0.00039, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False), loss='mean_squared_error')
Чтобы соответствовать модели, я кормлю ее по одной порции:
batch_size=10000
for i in range(int(X.shape[0] / batch_size)):
X = X_l[(i * batch_size):((i + 1) * batch_size)][:][:]
Y = Y_l[(i * batch_size):((i + 1) * batch_size)]
model_hist = model_LSTM.fit(X, Y, epochs=1,
batch_size=batch_size,
verbose=1, shuffle=False)
Я правильно это делаю? Сценарий выполняется без ошибок, но при использовании model_LSTM.predict () в новом наборе он просто выводит одно и то же значение для каждого временного шага.
input_shape
был(batch_size, timesteps, input_dim)
. Итак, ваша форма ввода должна быть(1, 100*10000, 3)
. Кроме того, поскольку вы не указалиreturn_sequences
, вывод LSTM равен(batch_size, units)
viz.(1, 32)
. Таким образом, для каждого входа существует только один временной шаг. 07.12.2018