Проблема с многоцелевой конфигурацией во временном трансформаторе слияния (прогнозирование Pytorch)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с многоцелевой конфигурацией во временном трансформаторе слияния (прогнозирование Pytorch)

Сообщение Anonymous »

Я пытаюсь обучить модель временного трансформатора слияния (TFT), используя библиотеку, организованную Pytorch, для задачи предсказания многоцелевого предсказания. Мой набор данных содержит многократные целевые столбцы с одним горячим, и я сталкиваюсь с ошибкой на шаге создания модели.
Сообщение об ошибке следующим образом: < /p>
'int' object is not iterable
< /code>
Несмотря на следование документации и настройку конфигурации, проблема сохраняется. Интересно, что когда я создаю упрощенный набор данных только с 1 целевыми столбцами, сценарий работает нормально. Ниже я предоставлю как рабочий сценарий (со случайными данными), так и неработающий сценарий (также со случайными данными). < /P>
Рабочий скрипт (упрощенный набор данных):
Вот скрипт, который работает с упрощенным набором данных, содержащим 1 целевой столбцы, вис. https://pytorch-forecasting.readthedocs ... lizer.html
import numpy as np
import pandas as pd
from pytorch_forecasting import TimeSeriesDataSet, TemporalFusionTransformer
from torch.nn import BCEWithLogitsLoss

# Create a test dataset with 5 target columns
test_data = pd.DataFrame(
dict(
**{f'target_{i}': np.random.randint(0, 2, 30) for i in range(1, 6)}, # 5 target columns
group=np.repeat(np.arange(3), 10),
time_idx=np.tile(np.arange(10), 3),
)
)

# Configure the TimeSeriesDataSet
dataset = TimeSeriesDataSet(
test_data,
group_ids=["group"],
target=[f'target_{i}' for i in range(1, 6)], # List of target columns
time_idx="time_idx",
min_encoder_length=5,
max_encoder_length=5,
min_prediction_length=2,
max_prediction_length=2,
time_varying_unknown_reals=[f'target_{i}' for i in range(1, 6)],
)

# Define the loss function
loss = [BCEWithLogitsLoss()] * len(dataset.target)

# Create the TFT model
model = TemporalFusionTransformer.from_dataset(
dataset,
hidden_size=16,
attention_head_size=1,
dropout=0.1,
hidden_continuous_size=8,
output_size=len(dataset.target), # Number of target columns
loss=loss, # Loss function
learning_rate=0.01,
)

print("Model created successfully!")
< /code>
Этот скрипт отлично работает с упрощенным набором данных.Errore durante la creazione del modello: 'int' object is not iterable
< /code>
Вот не работающий скрипт: < /p>

import numpy as np
import pandas as pd
from pytorch_forecasting import TimeSeriesDataSet, TemporalFusionTransformer
from torch.nn import BCEWithLogitsLoss

# Crea un dataset di prova con 5 colonne target
test_data = pd.DataFrame(
dict(
**{f'target_{i}': np.random.randint(0, 2, 30) for i in range(1,6)}, # 5 colonne target
group=np.repeat(np.arange(3), 10),
time_idx=np.tile(np.arange(10), 3),
)
)

# Configura il TimeSeriesDataSet
dataset = TimeSeriesDataSet(
test_data,
group_ids=["group"],
target=[f'target_{i}' for i in range(1,6)], # Lista di colonne target
time_idx="time_idx",
min_encoder_length=5,
max_encoder_length=5,
min_prediction_length=2,
max_prediction_length=2,
time_varying_unknown_reals=[f'target_{i}' for i in range(1, 6)],
)

# Verifica il numero di colonne target
print("Numero di colonne target:", len(dataset.target)) # Dovrebbe essere 5

# Crea il modello TFT
try:
model = TemporalFusionTransformer.from_dataset(

dataset,
hidden_size=16,
attention_head_size=1,
dropout=0.1,
hidden_continuous_size=8,
output_size=len(dataset.target), # Numero di colonne target
loss=[BCEWithLogitsLoss()] * len(dataset.target), # Una perdita per ciascuna colonna target
learning_rate=0.01,

)
print("Modello creato correttamente!")
except Exception as e:
print(f"Errore durante la creazione del modello: {e}")
< /code>
При запуске вышеуказанного скрипта я получаю следующую ошибку: < /p>
Error during model creation: 'int' object is not iterable
< /code>
Кроме того, я получаю следующие предупреждения: < /p>
Attribute 'loss' is an instance of `nn.Module` and is already saved during checkpointing. It is recommended to ignore them using `self.save_hyperparameters(ignore=['loss'])`.
Attribute 'logging_metrics' is an instance of `nn.Module` and is already saved during checkpointing. It is recommended to ignore them using `self.save_hyperparameters(ignore=['logging_metrics'])`.```

Environment:
• Python Version: 3.12
• PyTorch Forecasting Version: [1.3.0]
• PyTorch Lightning Version: [1.9.4]

Question:
How can I correctly configure the TemporalFusionTransformer for a multi-target prediction task with X one-hot encoded target columns ? Is there a specific way to define the loss parameter or handle multi-targets in this scenario?


Подробнее здесь: https://stackoverflow.com/questions/794 ... pytorch-fo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»