Понимание архитектуры модели может быть очень полезным как для отладки вашей сети, так и для понимания её поведения.
В этом документе мы построим глобальную модель, используя данные о часовой нагрузке региона ERCOT. В качестве референса мы используем записную книжку ./global_modeling.ipynb
Наконец, мы визуализируем архитектуру сети.
Сначала мы установим Graphviz. Для Windows перейдите по ссылке https://www.graphviz.org/download/. Для Mac/Linux выполните команду ниже.
try:# зависимости уже установленыfrom torchsummary import summaryfrom torchviz import make_dotexcept:# установка graphviz в системеimport platformif"Darwin"== platform.system(): !brew install graphvizelif"Linux"== platform.system(): !sudo apt install graphvizelse:print("перейдите по ссылке https://www.graphviz.org/download/")# Затем нам нужно установить следующие зависимости: !pip install torchsummary !pip install torch-summary !pip install torchviz !pip install graphviz# импортfrom torchsummary import summaryfrom torchviz import make_dot
Сначала загружаем данные:
ds
COAST
EAST
FAR_WEST
NORTH
NORTH_C
SOUTHERN
SOUTH_C
WEST
0
2004-01-01 01:00:00
7225.09
877.79
1044.89
745.79
7124.21
1660.45
3639.12
654.61
1
2004-01-01 02:00:00
6994.25
850.75
1032.04
721.34
6854.58
1603.52
3495.16
639.88
2
2004-01-01 03:00:00
6717.42
831.63
1021.10
699.70
6639.48
1527.99
3322.70
623.42
Извлекаем названия регионов, которые впоследствии будут использоваться при создании модели.
Глобальные модели могут быть активированы, когда входные данные df функции содержат дополнительную колонку ID, которая идентифицирует различные временные ряды (помимо типичной колонки ds, содержащей временные метки, и колонки y, содержащей наблюдаемые значения временного ряда). В нашем примере мы выбираем данные за трехлетний интервал (с 2004 по 2007 год).
ds
y
ID
0
2004-01-01 01:00:00
7225.09
COAST
1
2004-01-01 02:00:00
6994.25
COAST
2
2004-01-01 03:00:00
6717.42
COAST
Когда входными данными для функции split_df является pd.DataFrame с колонкой ‘ID’, обучающие и валидационные данные предоставляются в аналогичном формате. Для глобальных моделей входные данные обычно разделяются в соответствии с долей времени, охватывающей все временные ряды (по умолчанию, когда есть более одного ‘ID’ и когда local_split=False). Если пользователь хочет разделить каждый временной ряд локально, параметр local_split должен быть установлен в значение True. В этом примере мы разделим наши данные на обучающую и тестовую выборки (с долей теста 33% - 2 года обучения и 1 год теста).
Глобальное моделирование позволяет нам тренировать нашу модель, основываясь либо на глобальной, либо на локальной нормализации. В последнем случае каждый временной ряд нормализуется локально (у каждого временного ряда есть свои соответствующие параметры данных). В первом случае у нас есть уникальные параметры данных, которые будут использоваться во всех рассматриваемых временных рядах.
Глобальное моделирование — локальная нормализация
Процесс стандартной подгонки глобальных моделей основан на локализованной нормализации данных. Каждый временной ряд будет иметь параметры нормализации данных, связанные с каждым предоставленным идентификатором ('ID'). Мы собираемся определить модель, которая прогнозирует следующий час на основе данных последних 24 часов.
После создания объекта NeuralProphet, модель можно создать, вызвав функцию fit
Torch-summary предоставляет информацию, дополняющую то, что предоставляет print(your_model) в PyTorch, аналогично API model.summary() в Tensorflow для визуализации модели, что помогает при отладке вашей сети. В этом проекте мы реализуем аналогичный функционал в PyTorch и создаем чистый, простой интерфейс для использования в ваших проектах.
Небольшой пакет для создания визуализаций графиков и трассировок выполнения PyTorch.
Last updated
try:
from neuralprophet import NeuralProphet
except:
# если NeuralProphet еще не установлен:
!pip install git+https://github.com/ourownstory/neural_prophet.git
from neuralprophet import NeuralProphet
import pandas as pd
from neuralprophet import set_log_level
set_log_level("ERROR")
df_global = pd.DataFrame()
for col in regions:
aux = df_ercot[["ds", col]].copy(deep=True) # select column associated with region
aux = aux.iloc[:26301, :].copy(deep=True) # selects data up to 26301 row (2004 to 2007 time stamps)
aux = aux.rename(columns={col: "y"}) # rename column of data to 'y' which is compatible with Neural Prophet
aux["ID"] = col
df_global = pd.concat((df_global, aux))
df_global.head(3)