El conjunto de herramientas de IA de series temporales de la caja de herramientas de GeoAI contiene herramientas para analizar y procesar datos de series temporales. Este conjunto de herramientas incluye herramientas de entrenamiento y previsión de valores futuros en ubicaciones de un cubo espacio-temporal. Admite el entrenamiento y la aplicación de varios modelos de predicción de serie temporal basados en el aprendizaje profundo, como la red completamente conectada (FCN), la memoria a corto y largo plazo (LSTM), InceptionTime, ResNet y ResCNN.
Aunque estos modelos prefabricados son sólidos y eficaces, requieren un entrenamiento exhaustivo con grandes datasets de series temporales específicos de cada ámbito para lograr un rendimiento óptimo. Sin embargo, es posible que necesite un flujo de trabajo personalizado, por ejemplo para integrar modelos más recientes, incluidos los modelos básicos de series temporales, que ofrecen soluciones estándar para la previsión. Estos modelos básicos están preentrenados en amplios y diversos datasets de series temporales y pueden aplicarse directamente para predecir acontecimientos futuros basándose en datos de entrada específicos, sin necesidad de entrenamiento adicional. La posibilidad de generalizar entre distintos datasets de series temporales les confiere una gran versatilidad.
Los desarrolladores de Python pueden crear una función de series temporales para integrar ArcGIS con estos modelos de terceros y empaquetarlos como paquetes de aprendizaje profundo de Esri (archivos .dlpk) para utilizarlos con la herramienta Previsión con modelo de serie temporal.
Función de series temporales de Python personalizadas
Puede crear una función de series temporales en Python para integrar modelos de series temporales de terceros en un proceso de previsión de series temporales.
Los métodos de la función de series temporales se enumeran en la tabla siguiente y se describen con más detalle en las subsecciones siguientes.
Método | Descripción |
---|---|
__init__ | Inicialice variables de instancia como name, description y otros atributos esenciales para la función de series temporales. |
initialize | Cargue el modelo de series temporales y establezca las configuraciones iniciales. Utilice este método al inicio de la función de series temporales de Python. |
getParameterInfo | Defina los parámetros que acepta la función de series temporales. Esto incluye cualquier ajuste de configuración necesario para cargar o conectarse al modelo, así como los parámetros necesarios para el procesamiento de series temporales. |
getConfiguration | Describa cómo realizará la herramienta el procesamiento de las entradas y cómo generará las salidas. Incluye detalles para cualquier paso de preprocesamiento o posprocesamiento necesario para la función. |
predict | La función responsable de convertir los datos de entrada en la salida deseada. Utiliza parámetros definidos y una lógica de procesamiento para producir el resultado final. |
Métodos de la función
A continuación, se describen los métodos de la función de series temporales.
__init__
El método __init__ es el constructor de la función de series temporales personalizada e inicializa variables de instancia como el nombre, la descripción y otros atributos esenciales. Este método establece las propiedades que definen el comportamiento y las características de la función de series temporales.
El constructor crea una instancia de una clase de series temporales personalizada con todos los atributos necesarios para el procesamiento y el análisis. Cuando se crea una instancia de la clase de series temporales, este método garantiza que se inicializa con la configuración necesaria y los valores predeterminados. Por ejemplo, si la función de series temporales requiere ajustes específicos, como la ruta de la carpeta que contiene las ponderaciones del modelo y el archivo de configuración, pueden especificarse en este método.
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
El método initialize se llama al inicio de la función de series temporales personalizada de Python y con este método se le pasa el argumento kwargs['model']. El argumento kwargs['model'] es la ruta al archivo de definición del modelo de Esri (.emd). El método debe utilizarse para cargar los pesos del modelo para configurar el modelo de series temporales, asegurando una referencia al mismo para las operaciones posteriores.
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
El método getParameterInfo se invoca a través de la herramienta Previsión con modelo de serie temporal después del método initialize y define los parámetros necesarios para el modelo. Este método devuelve una lista de los parámetros de entrada esperados por la función de series temporales personalizada. Cada parámetro se describe mediante un diccionario que contiene el nombre, el tipo de datos, el nombre de visualización y la descripción del parámetro, así como un parámetro booleano que indica si el parámetro es obligatorio, como se muestra a continuación.
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
]
El método devuelve una lista de diccionarios, cada uno de los cuales describe un parámetro. Los atributos clave del diccionario son los siguientes:
- name: un identificador de cadena de caracteres para el parámetro
- dataType: tipo de datos que acepta el parámetro, como largo, cadena de caracteres, booleano o lista
- value: el valor predeterminado para el parámetro
- required: un booleano que indica si el parámetro es obligatorio
- displayName: un nombre fácil de usar para el parámetro
- domain: un conjunto de valores permitidos si procede
- description: una descripción detallada del parámetro
La lista de parámetros se muestra al usuario a través de los argumentos del modelo personalizado en la herramienta Previsión con modelo de serie temporal. Los usuarios pueden establecer estos valores de forma interactiva mediante la interfaz de usuario de la herramienta o pasarlos mediante programación al método getConfiguration como argumentos de palabra clave.
getConfiguration
El método getConfiguration configura y gestiona los parámetros de la función de series temporales. Acepta argumentos de palabras clave que contienen parámetros actualizados por los usuarios a través de la herramienta o suministrados mediante programación. Este método también controla cómo la función procesa y genera los datos basándose en los parámetros actualizados. Este método se invoca después del método getParameterInfo y antes del método predict. El valor de retorno de la función es un diccionario que contiene el valor de batch_size que indica cuántas secuencias puede procesar el modelo a la vez. El valor de retorno del método informa a la herramienta sobre cómo dividir los datos de entrada para su procesamiento por el modelo, un lote cada vez.
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
En el ejemplo anterior, la función personalizada de series temporales está configurada de la siguiente manera:
- Establece el parámetro sequence_length a partir de los argumentos proporcionados.
- Establece el parámetro batch_size a un máximo de 4 si se proporciona un valor mayor.
- Establece el parámetro number_of_timesteps_to_forecast desde el conjunto de herramientas.
- Devuelve los valores actualizados de los parámetros.
predict
El método predict realiza la inferencia generando previsiones utilizando el modelo de series temporales. El método acepta una matriz NumPy 2D que contiene los datos de entrada y devuelve los resultados como una matriz NumPy 2D. A continuación se describe un flujo de trabajo típico:
- Preprocese los datos de entrada para adaptarlos a los requisitos del modelo.
- Apliqueu el modelo de series temporales a los datos de entrada para generar previsiones.
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
Archivo .emd de Esri
Tras crear una función de series temporales personalizada de Python, incluya una referencia a la función en el archivo .emd especificándola junto al parámetro InferenceFunction. Esto garantiza que el archivo .emd se vincule correctamente a la función, lo que permite utilizarlo en una predicción de series temporales.
{
"InferenceFunction": "MyTimesFM.py",
"ModelType": "TimeSeriesForecasting"
}
El archivo .emd debe incluir las siguientes claves:
- InferenceFunction: el nombre del archivo que contiene la función de series temporales personalizadas
- ModelType: especifica el tipo de modelo, establecido en TimeSeriesForecasting
Archivo .dlpk personalizado
Para completar el modelo final de series temporales personalizadas de terceros, cree un archivo de modelo .dlpk. El archivo .dlpk permite utilizar este modelo con la herramienta Previsión con modelo de serie temporal del Conjunto de herramientas de IA de series temporales.
Organice los archivos de la siguiente manera:
- Cree una carpeta e incluya el archivo de la función de series temporales personalizada (por ejemplo, MyTimesFM.py) y el archivo .emd de Esri (por ejemplo, TimesFM.emd). El nombre de la carpeta debe coincidir con el nombre del archivo .emd.
Incluya los archivos o carpetas adicionales que sean necesarios para la función de series temporales.TimesFM/ ├── MyTimesFM.py └── TimesFM.emd
- Comprima la carpeta en un archivo ZIP. Cambie el nombre del archivo .zip para que coincida con el nombre del archivo .emd, pero con la extensión .dlpk. El archivo .dlpk ahora está listo para utilizarlo con la herramienta Previsión con modelo de serie temporal.