# Визуализация архитектуры сети

Понимание архитектуры модели может быть очень полезным как для отладки вашей сети, так и для понимания её поведения.

В этом документе мы построим глобальную модель, используя данные о часовой нагрузке региона ERCOT. В качестве референса мы используем записную книжку `./global_modeling.ipynb`

Наконец, мы визуализируем архитектуру сети.

Сначала мы установим Graphviz. Для Windows перейдите по ссылке <https://www.graphviz.org/download/>. Для Mac/Linux выполните команду ниже.

```python
try:
    # зависимости уже установлены
    from torchsummary import summary
    from torchviz import make_dot
except:
    # установка graphviz в системе
    import platform

    if "Darwin" == platform.system():
        !brew install graphviz
    elif "Linux" == platform.system():
        !sudo apt install graphviz
    else:
        print("перейдите по ссылке https://www.graphviz.org/download/")
    # Затем нам нужно установить следующие зависимости:
    !pip install torchsummary
    !pip install torch-summary
    !pip install torchviz
    !pip install graphviz
    # импорт
    from torchsummary import summary
    from torchviz import make_dot

```

```python
try:
    from neuralprophet import NeuralProphet
except:
    # если NeuralProphet еще не установлен:
    !pip install git+https://github.com/ourownstory/neural_prophet.git
    from neuralprophet import NeuralProphet
```

```python
import pandas as pd
from neuralprophet import set_log_level

set_log_level("ERROR")
```

Сначала загружаем данные:

```python
data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"
df_ercot = pd.read_csv(data_location + "multivariate/load_ercot_regions.csv")
df_ercot.head(3)
```

|   | 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 |

Извлекаем названия регионов, которые впоследствии будут использоваться при создании модели.

```python
regions = list(df_ercot)[1:]
```

Глобальные модели могут быть активированы, когда входные данные `df` функции содержат дополнительную колонку `ID`, которая идентифицирует различные временные ряды (помимо типичной колонки `ds`, содержащей временные метки, и колонки `y`, содержащей наблюдаемые значения временного ряда). В нашем примере мы выбираем данные за трехлетний интервал (с 2004 по 2007 год).

```python
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)
```

|   | 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 год теста).

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

### Глобальное моделирование — локальная нормализация

```python
m = NeuralProphet(n_lags=24, epochs=2, learning_rate=0.1)
df_train, df_test = m.split_df(df_global, valid_p=0.33, local_split=True)
```

Процесс стандартной подгонки глобальных моделей основан на локализованной нормализации данных. Каждый временной ряд будет иметь параметры нормализации данных, связанные с каждым предоставленным идентификатором ('ID'). Мы собираемся определить модель, которая прогнозирует следующий час на основе данных последних 24 часов.

После создания объекта `NeuralProphet`, модель можно создать, вызвав функцию `fit`

```python
metrics = m.fit(df_train, freq="H")
metrics.tail(1)
```

|   | MAE      | RMSE     | Loss     | RegLoss | epoch |
| - | -------- | -------- | -------- | ------- | ----- |
| 1 | 0.025526 | 0.033126 | 0.000416 | 0.0     | 1     |

#### 1. Сводная информация о сети

От <https://pypi.org/project/torch-summary/> :

Torch-summary предоставляет информацию, дополняющую то, что предоставляет `print(your_model)` в PyTorch, аналогично API `model.summary()` в Tensorflow для визуализации модели, что помогает при отладке вашей сети. В этом проекте мы реализуем аналогичный функционал в PyTorch и создаем чистый, простой интерфейс для использования в ваших проектах.

```python
display(summary(m.model))
```

```
=================================================================
Layer (type:depth-idx)                   Param #
=================================================================
├─MetricCollection: 1-1                  --
|    └─MeanAbsoluteError: 2-1            --
|    └─MeanSquaredError: 2-2             --
├─MetricCollection: 1-2                  --
|    └─MeanAbsoluteError: 2-3            --
|    └─MeanSquaredError: 2-4             --
├─GlobalPiecewiseLinearTrend: 1-3        13
├─GlobalFourierSeasonality: 1-4          --
|    └─ParameterDict: 2-5                30
├─ModuleList: 1-5                        --
|    └─Linear: 2-6                       24
=================================================================
Total params: 67
Trainable params: 67
Non-trainable params: 0
=================================================================
```

```
=================================================================
Layer (type:depth-idx)                   Param #
=================================================================
├─MetricCollection: 1-1                  --
|    └─MeanAbsoluteError: 2-1            --
|    └─MeanSquaredError: 2-2             --
├─MetricCollection: 1-2                  --
|    └─MeanAbsoluteError: 2-3            --
|    └─MeanSquaredError: 2-4             --
├─GlobalPiecewiseLinearTrend: 1-3        13
├─GlobalFourierSeasonality: 1-4          --
|    └─ParameterDict: 2-5                30
├─ModuleList: 1-5                        --
|    └─Linear: 2-6                       24
=================================================================
Total params: 67
Trainable params: 67
Non-trainable params: 0
=================================================================
```

#### 2. Сетевая визуализация

От <https://github.com/szagoruyko/pytorchviz> :

Небольшой пакет для создания визуализаций графиков и трассировок выполнения PyTorch.

```python
fig = make_dot(m.model.train_epoch_prediction, params=dict(m.model.named_parameters()))
# fig_glob.render(filename='img/fig_glob')
display(fig)
```

<figure><img src="https://neuralprophet.com/_images/how-to-guides_feature-guides_network_architecture_visualization_22_0.svg" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/neuralprophet/rukovodstva-po-funkciyam/vizualizaciya-arkhitektury-seti.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
