首页 > 解决方案 > Amazon DeepAR 超参数调整错误

问题描述

这是我运行代码后得到的:

_prepare_estimator_for_tuning estimator._prepare_for_training(job_name) 中的文件“C:\Users\admin\anaconda3\envs\tensorflow_env\lib\site-packages\sagemaker\tuner.py”,第 484 行

AttributeError:“DeepAREstimator”对象没有属性“_prepare_for_training”

互联网上似乎很少有关于 Amazon sagemaker deepar 算法的超参数调整示例。有人可以帮我解决这个问题吗?

import mxnet as mx
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from gluonts.model.deepar import DeepAREstimator
from gluonts.mx.trainer import Trainer
from gluonts.dataset.common import ListDataset
from itertools import islice
from gluonts.evaluation.backtest import make_evaluation_predictions
from sagemaker.tuner import HyperparameterTuner, IntegerParameter, CategoricalParameter, ContinuousParameter

df = pd.read_csv('final.csv', index_col=0,parse_dates=True)
                        
training_data = ListDataset(
    [{"start": df.index[0], "target": df.outbound_qty[:pd.to_datetime('2021-01-01')],
      "feat_dynamic_real": [df.is_holiday[:pd.to_datetime('2021-01-01')],
                            df.is_salary[:pd.to_datetime('2021-01-01')],
                            df.count_qty[:pd.to_datetime('2021-01-01')],
                            df.shelf_qty[:pd.to_datetime('2021-01-01')]]
      }],
    freq="D"
)

estimator = DeepAREstimator(freq="D",prediction_length=7,trainer=Trainer(ctx=mx.context.cpu()))

hyperparams = {'learning_rate': ContinuousParameter(0.001, 0.1),
                'epochs': IntegerParameter(10, 100),
                'context_length': IntegerParameter(7, 90),
                'mini_batch_size': IntegerParameter(32, 128)
                }

tuner = HyperparameterTuner(estimator=estimator,  objective_metric_name="test:RMSE",
                        objective_type='Minimize',hyperparameter_ranges=hyperparams)

tuner.fit(inputs = training_data)

标签: pythonmachine-learningdeep-learningtime-serieslstm

解决方案


你混合了两个不同版本的 DeepAR,这就是你有错误的原因。DeepAR(Salinas 等人)实际上在 3 个地方实现:

  1. Amazon Forecast中:DeepAR+ 是 DeepAR 的托管实施,其中所有的科学代码都是为您编写的,您只需使用 Forecast SDK 即可在您的 S3 数据上启动服务。(示例)。如果您不想编写任何科学代码并希望获得托管体验,请使用 Amazon Forecast。
  2. Amazon SageMaker 中:SageMaker 有一个内置的 DeepAR 容器,您可以使用它来训练 S3 数据。请参阅此处的可用超参数此处的示例。如果您想要更多控制,请使用 SageMaker DeepAR,同时仍然不必编写模型代码(更多超参数、硬件选择)
  3. 在开源 GluonTS 中:AWS 创建的 GluonTS 开源神经预测库带有 DeepAR 的实现(示例)。因为它是开源的,您可以免费使用它,您可以浏览代码并将其安装在任何兼容的地方。例如,您可以在 SageMaker 容器中使用 GluonTS DeepAR(博客文章)。此博客文章显示了 SageMaker 容器中的 GluonTS LSTNet 模型。如果您想要更多自由,请使用 GluonTS。但请记住,更多的自由伴随着更多的责任:您将不得不选择训练和推理硬件并编写科学和编排代码。

没有证据表明这 3 个 DeepAR 实现有任何共同点(除了来自 AWS),它们的代码库可能不同。

为了使用 DeepAR 运行超参数调整,您有几个选项:

  1. 在 Amazon Forecast 中:使用HyperparameterTuningJobConfig
  2. 在 Amazon SageMaker DeepAR 中:使用 SageMaker 模型调整,如此处所述
  3. 在 Amazon SageMaker 中使用 GluonTS:将 SageMaker 模型调整与自定义指标结合使用。
  4. 使用 SageMaker 之外的 GluonTS:在您选择的基础架构上使用您选择的超参数调整库(RayTuneOptuna ...)

推荐阅读