> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/neuralprophet/rukovodstva-po-funkciyam/vizualizaciya-arkhitektury-seti.md).

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

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

В этом документе мы построим глобальную модель, используя данные о часовой нагрузке региона 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>
