Я новичок в работе с Tensorflow и в программировании в целом. Поэтому извините, если этот вопрос кажется тривиальным или ответ на него был дан где-то в другом месте, что я, возможно, не понял как решение моей проблемы.
Над чем я работаю
Проект, над которым я работаю, касается многомерной классификации временных рядов. Данные обучения, которые я использую, представляют собой около 100 кадров данных pandas, содержащих данные датчиков, сохраненные в формате CSV (хотел бы переключиться на соленья), состоящие из 13 функций/временных рядов. Столбцы/временные ряды в кадре данных во всех случаях имеют одинаковую длину, но сами кадры данных различаются по длине. Поскольку LSTM, похоже, поддерживают данные временных рядов разной длины (1, 2) в разных пакетах, я хотел бы попробовать их с различной длиной и добавить нулевое дополнение, если результаты неудовлетворительны. CSV-файлы сохраняются в разных папках с указанием 5 целей.
Мои данные упрощены и выглядят примерно так:
Для target1/example_t1_1.csv длиной n это будет:
время функцияA функцияB ... функцияK t1 а(t1) b(t1) ... К(t1) t2 а(t2) b(t2) ... К(t2) ... ... ... ... ... нет а(тн) b(tn) ... K(tn)
и target2/example_t2_1.csv длиной j:
время функцияA функцияB ... функцияK t1 а(t1) b(t1) ... К(t1) t2 а(t2) b(t2) ... К(t2) ... ... ... ... ... tj а(tj) b(tj) ... К(tj)
и так далее.
Какова моя цель
Моей целью было бы в основном использовать функции tf.data для создания конвейера данных, который считывает мои данные непосредственно в набор данных tf, на котором я затем выполняю другие операции, такие как поезд-тест-разделение, масштабирование и т. д. По крайней мере, мне кажется, что именно так вы и должны это делать. Или, по крайней мере, иметь более элегантный и удобный способ обработки данных многомерных временных рядов и способ маркировки данных по местоположению папки, как я делаю сейчас. Также сейчас работаю с 3d np.array. Я не могу понять, как читать данные разной длины без заполнения нулями.
Моя проблема
Я нахожу только ресурсы о том, как обращаться с tf.data с одним фреймом данных, где каждая строка представляет собой, по сути, один отдельный «обучающий экземпляр» (3, 4, 5), тогда как в моем случае я не Я хочу прочитать не один кадр данных в наборе данных, а несколько, где строки также должны рассматриваться как связанные. Я просто не могу понять, можно ли и как это сделать. Насколько я понимаю, моей целью должно быть создание некоего набора данных с размерами [num_of_различных_dfs, len_of_df (=None), num_of_features(13)]. С помощью этого видео (6) мне, по крайней мере, удалось поместить цели в набор данных tf, но мне не удалось сделать то же самое с фактическими данными.
Надеюсь, мой вопрос с пояснениями моих мыслей был понятен. Я был бы очень рад, если бы кто-нибудь мог предоставить дополнительную информацию о том, как правильно обрабатывать данные многомерных временных рядов, или направить меня к нужным ресурсам. Спасибо, что нашли время прочитать все это!
Как я читаю данные на данный момент
До сих пор я все считывал данные «вручную»: я написал две функции для поиска CSV с кратчайшим временным рядом (8 выборок) и считывал каждый из них такой длины как составной кадр данных для каждого цель. (Я знаю, что выбрасывать данные — это большая проблема, но в то время я не знал этого лучше.) В итоге у меня получилось 5 разных фреймов данных, содержащих данные временных рядов для каждой цели. Зная количество отдельных временных рядов, функция создала целевой вектор для каждой цели. Позже объединил 5 фреймов данных в массивы NumPy и сделал то же самое для целевых векторов, в результате чего у меня появился один двумерный массив «X» размера (8 * 100, 13) и целевой вектор «y» размера (100, 1). Затем X я превратил в трехмерный массив размером (100, 8, 13). Поскольку я хранил данные тестирования в другой папке, в которой выполнял те же действия, я не разделял X и y для обучения, тестирования и разделения. Вероятно, я бы не хотел делать это снова
