Le jeu d’outils IA de série chronologique de la boîte à outils GeoAI contient des outils permettant d’analyser et de traiter les données de séries chronologiques. Ce jeu d’outils inclut des outils permettant d’entraîner et de prévoir les valeurs futures à des emplacements dans un cube spatio-temporel. Il soutient l’entraînement et l’application de divers modèles de prévision de séries chronologiques basés sur le Deep Learning, tels que les modèles FCN (Fully Connected Network), LSTM (Long Short-Term Memory), InceptionTime, ResNet et ResCNN.
Bien que ces modèles préconstruits soient robustes et efficaces, ils requièrent un entraînement considérable sur des jeux de données de séries chronologiques volumineux et propres au domaine pour atteindre des performances optimales. Toutefois, vous pouvez avoir besoin d’un processus personnalisé, par exemple pour intégrer des modèles plus récents, notamment des modèles de bases de séries chronologies qui offrent des solutions prêtes à l’emploi pour les prévisions. Ces modèles de bases sont pré-entraînés sur des jeux de données de séries chronologiques variés et peuvent être appliqués directement pour prédire les événements futurs en fonction de données en entrée spécifiques, sans aucun entraînement supplémentaire. Les fonctions permettant une généralisation dans différents jeux de données de séries chronologiques rendent ces modèles très polyvalents.
Les développeurs Python peuvent créer une fonction de série chronologique personnalisée à intégrer à ArcGIS avec ces modèles tiers externes et les empaqueter en tant que paquetages de Deep Learning Esri (fichiers .dlpk) pour les utiliser avec l’outil Prévoir à l’aide d’un modèle de série chronologique.
Fonction de série chronologique Python personnalisée
Vous pouvez créer une fonction de série chronologique dans Python pour intégrer les modèles de séries chronologiques tiers à un pipeline de prévision de séries chronologiques.
Les méthodes des fonctions de séries chronologiques sont répertoriées dans la table suivante et sont décrites de façon plus complète dans les sous-sections ci-dessous.
Méthode | Description |
---|---|
__init__ | Initialiser les variables d’instance, telles que name, description et d’autres attributs essentiels à la fonction de série chronologique. |
initialize | Charger le modèle de série chronologique et configurer les configurations initiales. Utilisez cette méthode au début de la fonction de série chronologique Python. |
getParameterInfo | Définir les paramètres que la fonction de série chronologique accepte. Cela inclut les paramètres de configuration requis pour charger ou se connecter au modèle, ainsi que les paramètres nécessaires au traitement de série chronologique. |
getConfiguration | Décrire la façon dont l’outil exécute le traitement des entrées et génère des sorties. Cela inclut les détails des étapes de prétraitement ou de post-traitement nécessaires à la fonction. |
predict | Fonction chargée de convertir les données en entrée en sortie souhaitée. Elle utilise des paramètres définis et une logique de traitement pour produire le résultat final. |
Méthodes des fonctions
Les méthodes des fonctions de séries chronologiques sont décrites ci-dessous.
__init__
La méthode __init__ est le constructeur de la fonction de série chronologique personnalisée et initialise les variables d’instance, telles que le nom, la description et d’autres attributs essentiels. Cette méthode définit les propriétés qui définissent le comportement et les caractéristiques de la fonction de série chronologique.
Le constructeur crée une instance d’une classe de série chronologique personnalisée avec tous les attributs nécessaires pour le traitement et l’analyse. Lors de la création d’une instance d’une classe de série chronologique, cette méthode s’assure qu’elle est initialisée avec les paramètres et valeurs par défaut nécessaires. Par exemple, si la fonction de série chronologique requiert des paramètres spécifiques, tels que le chemin d’accès au dossier contenant les pondérations du modèle et le fichier de configuration, cette méthode permet de les spécifier.
class MyTimesFM:
def __init__(self, **kwargs):
"""
It sets up the initial state of an object by defining its attributes,
such as name, description, and other properties.
"""
self.name = "TimeSeriesForecast"
self.description = '''The `MyTimesFM` class is designed to perform time series forecasting tasks.'''
# Additional initialization code here
initialize
La méthode initialize est appelée au début de la fonction de série chronologique Python personnalisée et avec cette méthode, l’argument kwargs['model'] est transmis. L’argument kwargs['model'] est le chemin d’accès au fichier de définition du modèle (.emd) Esri. La méthode doit être utilisée pour charger les pondérations du modèle et configurer le modèle de série chronologique, ce qui garantit son référencement en cas d’opérations ultérieures.
def initialize(self, **kwargs):
"""
Initialize model parameters, such as loading pretrained model weights.
"""
json_file = kwargs['model']
with open(json_file, 'r') as f:
self.json_info = json.load(f)
# Access the model path in the model definition file
model_path = json_info['ModelFile']
# Load your model and keep an instance for the modelt
self.model = load_your_model(model_path)
# Additional initialization code here
getParameterInfo
La méthode getParameterInfo est appelée par l’outil Prévoir à l’aide d’un modèle de série chronologique après la méthode initialize et définit les paramètres requis par le modèle. Cette méthode renvoie une liste des paramètres en entrée attendus par la fonction de série chronologique personnalisée. Chaque paramètre est décrit à l’aide d’un dictionnaire contenant le nom, le type de données, le nom d’affichage et la description du paramètre, ainsi que d’un paramètre booléen indiquant si le paramètre est obligatoire, comme illustré ci-dessous.
def getParameterInfo(self):
return [
{
"name": "batch_size",
"dataType": "long",
"required": False,
"displayName": "batch_size",
"description": "The number of sequences processed in one forward pass through the model.",
"value": "16"
},
{
"name": "sequence_length",
"dataType": "long",
"required": True,
"displayName": "sequence_length",
"description": "Use the sequence length number of time steps to forecast the next user-defined time steps.",
"value": "32"
},
# Additional code here
]
La méthode renvoie une liste de dictionnaires, chacun décrivant un paramètre. Voici les attributs clés du dictionnaire :
- name : identifiant de chaîne du paramètre
- dataType : type de données que le paramètre accepte (long, chaîne, booléen ou liste, par exemple)
- value : valeur par défaut du paramètre
- required : valeur booléenne indiquant si le paramètre est obligatoire
- displayName : nom convivial du paramètre
- domain : ensemble de valeurs autorisées, le cas échéant
- description : description détaillée du paramètre
L’utilisateur peut voir la liste des paramètres par l’intermédiaire des arguments du modèle personnalisé dans l’outil Prévoir à l’aide d’un modèle de série chronologique. Les utilisateurs peuvent définir ces valeurs de façon interactive à l’aide de l’interface utilisateur de l’outil ou les transmettre par programmation à la méthode getConfiguration en tant qu’arguments de mots-clés.
getConfiguration
La méthode getConfiguration configure et gère les paramètres de la fonction de série chronologique. Elle accepte les arguments de mots-clés contenant des paramètres mis à jour par les utilisateurs via l’outil ou par programmation. Cette méthode contrôle également la façon dont la fonction traite et génère les données en fonction des paramètres mis à jour. Cette méthode est invoquée après la méthode getParameterInfo et avant la méthode predict. La valeur renvoyée de la fonction est un dictionnaire contenant la valeur de batch_size qui indique le nombre de séquences que le modèle peut traiter à la fois. La valeur renvoyée de la méthode indique à l’outil comment fractionner les données en entrée en vue du traitement par le modèle, un lot à la fois.
def getConfiguration(self, **kwargs):
"""
This method configures the supported time series function parameters and
controls further processing based on them.
"""
# Set the sequence_length and batch_size from the provided arguments
self.sequence_length = int(kwargs.get("sequence_length"))
# Set the batch size, limiting it to a maximum of 4
if kwargs.get("batch_size", 0) > 4:
kwargs["batch_size"] = 4
self.batch_size = kwargs.get("batch_size")
# Set the number_of_timesteps_to_forecast from the toolset
self.number_of_timesteps_to_forecast = kwargs.get("number_of_timesteps_to_forecast")
# Return the updated parameter values
return kwargs
Dans l’exemple ci-dessus, la fonction de série chronologique personnalisée est configurée comme suit :
- Configurez le paramètre sequence_length à partir des arguments fournis.
- Limitez le paramètre batch_size à un maximum de 4 si une valeur supérieure est fournie.
- Définissez le paramètre number_of_timesteps_to_forecast à partir du jeu d’outils.
- Renvoyez les valeurs des paramètres mis à jour.
predict
La méthode predict effectue une inférence en générant des prévisions avec le modèle de série chronologique. La méthode accepte une matrice NumPy 2D contenant les données en entrée et renvoie les résultats sous la forme d’une matrice NumPy 2D. Voici un processus classique :
- Prétraitez les données en entrée pour qu’elles répondent aux exigences du modèle.
- Appliquez le modèle de série chronologique aux données en entrée pour générer des prévisions.
def predict(self, input_sequences):
"""
Forecast time series data based on the input data.
"""
# Preprocessing input code here
# Input_sequences is a 2d Numpy Array of shape (batch_size, total number of time steps).
# Adjust the input sequence length as per the model requirements.
input_sequences = input_sequences[:, -self.sequence_length:]
# Make Forecasts
forecasts = self.model.predict(input_sequences, self.number_of_timesteps_to_forecast)
# Additional code here
# Return the forecasted values in the shape of (batch_size, number_of_timesteps_to_forecast)
return forecasts
Fichier .emd Esri
Après avoir créé une fonction de série chronologique Python personnalisée, incluez une référence à la fonction dans le fichier .emd en la spécifiant dans le paramètre InferenceFunction. Cela permet de garantir que le fichier .emd fait correctement référence à la fonction, ce qui facilite son utilisation dans une prévision de série chronologique.
{
"InferenceFunction": "MyTimesFM.py",
"ModelType": "TimeSeriesForecasting"
}
Le fichier .emd doit inclure les clés suivantes :
- InferenceFunction : nom du fichier contenant la fonction de série chronologique personnalisée
- ModelType : spécifie le type de modèle, défini sur TimeSeriesForecasting
Fichier .dlpk personnalisé
Pour terminer le modèle de série chronologique personnalisé tiers, créez un fichier de modèle .dlpk. Le fichier .dlpk vous permet d’utiliser ce modèle avec l’outil Prévoir à l’aide d’un modèle de série chronologique dans le jeu d’outils IA de série chronologique.
Organisez les fichiers comme suit :
- Créez un dossier et intégrez le fichier de la fonction de série chronologique personnalisée (par exemple, MyTimesFM.py) et le fichier Esri .emd (par exemple, TimesFM.emd). Le nom du dossier doit correspondre à celui du fichier .emd.
Ajoutez les fichiers ou dossiers supplémentaires nécessaires à la fonction de série chronologique.TimesFM/ ├── MyTimesFM.py └── TimesFM.emd
- Compressez le dossier en archive ZIP. Renommez le fichier .zip pour qu’il corresponde au nom du fichier .emd mais avec l’extension .dlpk. Le fichier .dlpk est maintenant prêt à être utilisé avec l’outil Prévoir à l’aide d’un modèle de série chronologique.
Vous avez un commentaire à formuler concernant cette rubrique ?