Как подать метки обучающего набора в Keras LSTM

Вопрос или проблема

Я реализую LSTM с использованием Keras и знаю, что мне нужно изменить размер обучающего набора данных на 3D объект. В основном, у меня есть набор данных размером (300000, 839), и я изменяю его на (100000, 3, 839), потому что я хочу временной шаг равный 3. Вопрос в том: как мне обрабатывать метки обучающего набора? Нужно ли их тоже изменять? Если я изменю метки до 100000, я не усечу 200000 меток, поскольку начальное количество меток составляет 300000?

Заранее спасибо.

Ваш подход до сих пор не совсем правильный. Предполагая, что вы хотите использовать модель many to one, вы можете сделать это следующим образом:

У вас есть набор данных, похожий на этот:

введите описание изображения сюда

И вы подготавливаете ваши данные таким образом:

введите описание изображения сюда

Источник

Для временного шага 3 вы отбрасываете первые 2 случая ваших меток и используете $y_{3}$ для входных данных $\{x_1, x_2,x_3\}$.

Далее вы не начинаете с $x_4$. Вместо этого вы используете следующий срез из трех элементов $\{x_2, x_3, x_4\}$ с меткой обучения $y_4$.

Таким образом, вы продолжаете до последнего ввода $\{x_{n-2}, x_{n-1}, x_{n}\}$, чтобы предсказать $y_n$. Если у вас есть $n=30000$ образцов, вы сможете сгенерировать до $n-2$ (29998) обучающих образцов для вашей модели, следуя этой логике.

Вам не нужно изменять размер меток. Метки в LSTM могут быть одномерными. Только массив, содержащий значения x, нужно изменить.

Ответ или решение

Как подать метки обучающей выборки в Keras LSTM

При разработке моделей на базе LSTM (долгосрочной памяти с учетом временных рядов) в Keras важно правильно подготовить как входные данные, так и метки. Давайте разберем процесс, учитывая вашу задачу с форматом данных и необходимыми преобразованиями.

1. Подготовка входных данных LSTM

Вы упомянули, что ваш набор данных имеет размерность (300000, 839), и вы хотите преобразовать его в 3D-массив с размерностью (100000, 3, 839). Это преобразование необходимо, поскольку LSTM ожидает, что входные данные будут представлены в виде трехмерного массива, где:

  • первый размер: количество выборок (samples),
  • второй размер: количество временных шагов (timesteps),
  • третий размер: количество признаков (features).

Для формирования вашего нового массива вам необходимо использовать метод "скользящего окна". Это означает следующее:

  • Вы берете первые 3 строки (timesteps) из вашего набора данных как входные данные и соответствующую метку для предсказания (это будет четвертая метка).
  • Затем вы сдвигаетесь на один шаг и повторяете процесс, пока не достигнете конца вашего набора данных.

2. Обработка меток

Что касается меток, то их формирование также требует внимательного подхода. В случае вашей задачи, когда вы используете 3 временных шага, ваши метки будут формироваться следующим образом:

  • Исходная метка — это просто следующий элемент после вашего "окна". То есть, если вы имеете x_1, x_2, и x_3 (ваши входные данные), то соответствующей меткой будет y_4.
  • Таким образом, если ваш исходный массив имеет 300000 строк, после применения техники "скользящего окна" вам не нужно изменять размерность меток, а просто исключить первые два элемента. В результате, у вас останется 299998 меток.

Следовательно, ваши метки будут представлять собой одномерный массив размером (299998,), который будет соответствовать каждой выборке из вашего входного 3D массива.

3. Пример кода

Для иллюстрации, приведем пример кода, который выполняет описанные шаги:

import numpy as np

# Допустим, у нас есть данные и метки
data = np.random.random((300000, 839))
labels = np.random.random((300000,))

# Функция для подготовки входных данных и меток
def prepare_data(data, labels, time_steps=3):
    x, y = [], []

    for i in range(len(data) - time_steps):
        x.append(data[i:i + time_steps])
        y.append(labels[i + time_steps])

    return np.array(x), np.array(y)

# Подготовим данные
X, y = prepare_data(data, labels)

print(X.shape)  # Должно быть (299997, 3, 839)
print(y.shape)  # Должно быть (299997,)

4. Заключение

Важно помнить, что LSTM требует строгого соблюдения формата входных данных. Изменение размерности меток в большинстве случаев не требуется; достаточно следовать логике "скользящего окна", чтобы точно соотнести входные данные и метки. Это обеспечит корректное обучение модели и улучшит её качество.

Следуя данным рекомендациям, вы сможете эффективно подготавить ваши данные и метки для успешного обучения LSTM в Keras. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за помощью к сообществу или профессионалам в данной области.

Оцените материал
Добавить комментарий

Капча загружается...